Como posso usar corretamente o comando 'sed' neste cenário em particular

1

Há uma pergunta muito simples que está me incomodando sobre o comando sed. Ler a documentação sobre este comando me deixou confuso (principalmente porque o inglês não é meu idioma principal).

Então, minha pergunta é:

Eu tenho um arquivo names.txt, onde cada linha é da forma:

xxxxxx   random_string_of_characters    2015

em que xxxxxx é um número de 6 dígitos e random_string_of_characters pode ser qualquer coisa . Eu quero usar o comando substitute para substituir todo o espaço vazio e o random_string_of_characters entre xxxxxx e 2015 em cada linha, para que cada string tenha esta aparência:

xxxxxx 2015

Então, qual seria a melhor maneira de conseguir isso?

Obrigado antecipadamente!

    
por Blaski 29.04.2015 / 02:26

2 respostas

1

Você poderia fazer

sed -i -e 's/[[:space:]]\+.\+2015$/ 2015/' names.txt

Se você quiser salvá-lo no mesmo arquivo. Solte o -i se você quiser apenas imprimir no stdout, o que você pode redirecionar para outro arquivo.

Ele corresponderá a qualquer número de espaços seguido por qualquer coisa até 2015 no final da linha e substituirá toda a partida por "2015"

Outra possibilidade seria fazer

sed -e 's/^\([[:digit:]]\{6\}\).\+\([[:digit:]]\{4\}\)$/ /'  names.txt

Que corresponderá a 6 dígitos no início da linha e 4 no final e imprimirá as correspondências com um espaço entre elas. Deixará quaisquer outras linhas inalteradas.

    
por 29.04.2015 / 02:33
0

minha preferência é ancorar ao início da string para reduzir o rastreamento de volta e eu gosto de regexp estendido, então eu usaria

sed -re 's/^([0-9]{6}) .*( 2015)$//' names.txt

o que isso faz

-r extended regexp
-e expression to follow
s substitute
^ beginning of line
( start subpattern
[0-9] a digit
{6} previous occurs exactly six times
) end subexpression
. any single character
* previous occurs zero or more times
$ end of line
 first subpattern
 second subpattern
    
por 29.04.2015 / 03:09

Tags