Inserir texto após a primeira letra do padrão

Inserir texto após a primeira letra do padrão

Como eu poderia inserir /foo/depois e somente depois de abrir os colchetes?

(bar)

Deve se tornar

(/foo/bar)

enquanto (/baz/bar)deverianãotornar-se(/baz/foo/bar)

Responder1

Neste caso simples, você poderia tentar

sed 's,(bar,(/foo/bar,'

Responder2

Uma maneira complicada, supondo que você queira /foo/adicionarqualquerpadrão entre parênteses:

$ echo '(bar)' | sed 's;(/*\([^(]*\);(/foo/\1;'
(/foo/bar)

$ echo '(/bar/baz)' | sed 's;(/*\([^(]*\);(/foo/\1;'
(/foo/bar/baz)

O comando diz:

Selecione o que está entre parênteses e capture-o (pode começar com uma barra /) e substitua (ou (/por /foo/e o padrão capturado.

Responder3

Usando awk:

awk '/\(bar/ {sub(/bar/, "/foo/bar"); }1' input

Com sed:

sed -E 's%([(])(bar)%\1/foo/\2%' input

Isso usa referências anteriores \1 para (e \2 para bar.

informação relacionada