Como extrair caracteres de um nome de arquivo [duplicado]

0

Eu tenho uma lista que contém nomes de arquivos. Como posso criar uma nova lista contendo apenas os 4 primeiros caracteres de cada linha?

    
por Krsztr 10.01.2018 / 11:22

1 resposta

1

Você pode usar grep para mostrar apenas os primeiros (até) 4 caracteres de cada linha:

grep -Eo '^.{,4}' /PATH/TO/FILE

-E ativa expressões regulares estendidas, o que é necessário para o quantificador de colchetes aqui.% -o torna grep output apenas a parte correspondente, não a linha inteira na qual foi encontrada

O padrão ^.{,4} corresponde no início de uma linha ( ^ ) uma sequência que consiste em qualquer caractere ( . ) e tem até 4 caracteres ( {,4} ).

Para salvar a saída como um arquivo, basta usar o redirecionamento:

grep -Eo '^.{,4}' /PATH/TO/FILE > /PATH/TO/OUTPUT-FILE

Acompanhamento:

Para um padrão genérico para corresponder a um intervalo específico (do x-ésimo caractere ao y-ésimo caractere), considere este exemplo, que exibe do 10º ao 18º caractere de cada linha:

$ echo 123456789abcdefghij | grep -Po '(?<=^.{9}).{8}'
abcdefgh

Isto é conseguido pulando os 9 primeiros caracteres sem combiná-los usando um chamado lookbehind ( (?<=...) ). Esse recurso não está incluído nas expressões regulares estendidas entendidas por grep , portanto, precisamos de -P para ativar o PCRE.

Depois de exatamente 9 caracteres terem sido ignorados, ele corresponde aos próximos exatamente 8 caracteres. Se a linha for menor que isso, ela não corresponderá. Para corresponder até 8 caracteres novamente, como na primeira parte desta resposta, escreva {,8} em vez de {8} .

    
por Byte Commander 10.01.2018 / 11:33