Pergunta

A instrução a seguir irá remover números de linha em um arquivo txt:

cat withLineNumbers.txt | sed 's/^.......//' >> withoutLineNumbers.txt

O arquivo de entrada é criado com a seguinte declaração (este eu sei):

nl -ba input.txt >> withLineNumbers.txt

Eu sei que a funcionalidade de gato e sei que o resultado é escrito para o 'withoutLineNumbers.txt' arquivo.Mas a parte do '| sed 's/^.......//'' não é muito claro para mim.

Obrigado pelo seu tempo.

Foi útil?

Solução

Que sed expressão regular simplesmente remove os 7 primeiros caracteres de cada linha.A expressão regular ^....... diz que "Qualquer 7 caracteres no início da linha." O sed argumento s/^.......// substitui o acima expressão regular com uma cadeia de caracteres vazia.

Consulte o sed(1) página de man para mais informações.

Outras dicas

que sed declaração diz a excluir o primeiro de 7 caracteres.um ponto "." significa qualquer caractere.Há uma maneira ainda mais fácil de fazer isso

 awk  '{print $2}' withLineNumbers.txt

você apenas tem de imprimir a 2ª coluna usando awk.Não há necessidade de usar regex

se os seus dados tiverem espaços,

awk  '{$1="";print substr($0,2)}' withLineNumbers.txt

sed está fazendo uma pesquisa e substituição.O 's' significa pesquisa, o próximo caractere ('/') é o separador, a expressão de busca é '^.......', e a expressão de substituição é uma cadeia de caracteres vazia (i.e.tudo entre os dois últimos barras).

A pesquisa é uma expressão regular.O '^' significa match início da linha.Cada um '.' significa corresponde a qualquer caractere.Assim, a expressão de busca corresponde a 7 primeiros caracteres de cada linha.Este é, então, substituído por uma seqüência de caracteres vazia.Então, o que a sed está a fazer é remover os 7 primeiros caracteres de cada linha.

Uma maneira mais simples para alcançar o mesmo acha que poderia ser:

cut -b8- withLineNumbers.txt > withoutLineNumbers.txt
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top