Substituir somente na primeira linha correspondente com sed

4

Usando BSD sed (sem extensões GNU), como posso executar uma operação semelhante ao exemplo fornecido abaixo, mas onde, em vez do número da linha, a substituição é realizada na primeira linha na qual um padrão ocorre (em vez de ter para especificar um número real)?

Restricting to a line number

The simplest restriction is a line number.
If you wanted to delete the first number on line 3, just add a "3" before the command:

sed '3 s/[0-9][0-9]*//' <filename >newfilename

Fonte: link

    
por tjt263 20.12.2015 / 23:40

2 respostas

0

Isso funciona perfeitamente:

sed '1,/abc/s/abc/xyz/' file.txt

Pode ser abreviado para:

sed '1,/abc/s//xyz/' file.txt

Compatível com o GNU & BSD.

 
    
por 21.12.2015 / 11:37
0
{ sed -Ee'/[0-9]+/{s///;q;}'; cat; } <in >out

^ deve funcionar com um BSD sed . mas aparentemente isso não acontece.

e assim:

sed -e'/[0-9][0-9]*/{s///;:b' -e'n;bb' -e\} <in >out

... deve trabalhar com qualquer um deles.

    
por 21.12.2015 / 00:18