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.
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
{ 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.