Usando sed para substituir apenas as duas primeiras capturas regex com strings diferentes

3

Estou tentando mudar duas instâncias de um padrão regex para duas strings diferentes com sed, como:

sed -E "s/\t([A-Za-z]|[-])+$/\t'get_addr.py -1'/" /path/to/file.ext
sed -E "s/\t([A-Za-z]|[-])+$/\t'get_addr.py -2'/" /path/to/file.ext

Eu tentei muitas coisas e fiz uma grande quantidade de buscas de manpages, mas não consigo entender como isso acontece.

Existe uma maneira de dizer ao sed para substituir cada correspondência por uma string diferente com algo como

sed -E "s/\t([A-Za-z]|[-])+$/[1st replacement],[2nd replacement]/" /path/to/file.ext

e / ou existe uma maneira que eu possa especificar na regex que eu estou procurando pela enésima correspondência, para que eu possa apenas chamar sed duas vezes?

    
por blanket_cat 24.08.2014 / 16:35

1 resposta

3

Pelo menos no GNU sed, acho que você pode fazer algo como

sed -e '0,/pattern/ s//replacement1/' -e '0,/pattern/ s//replacement2/' file

por exemplo. dado um arquivo

abc
def
abc
ghi
abc
jkl

então

$ sed -e '0,/abc/ s//XYZ/' -e '0,/abc/ s//UVW/' file
XYZ
def
UVW
ghi
abc
jkl
    
por 24.08.2014 / 17:45