Insertar texto después de la primera letra del patrón

Insertar texto después de la primera letra del patrón

¿Cómo podría insertar /foo/después y sólo después de abrir corchetes?

(bar)

debe convertirse

(/foo/bar)

mientras (/baz/bar)deberíanoconvertirse(/baz/foo/bar)

Respuesta1

En este caso simple, puedes intentar

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

Respuesta2

Una forma complicada, asumiendo que desea /foo/agregarcualquierpatrón entre paréntesis:

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

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

El comando dice:

Seleccione lo que está entre paréntesis y captúrelo (podría comenzar con una barra diagonal /) y reemplace (o (/con /foo/y el patrón capturado.

Respuesta3

Usando awk:

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

Con sed:

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

Esto utiliza referencias inversas \1 para (y \2 para bar.

información relacionada