¿Cómo usar sed para sustituir todo lo demás con otra cadena excepto el patrón?

¿Cómo usar sed para sustituir todo lo demás con otra cadena excepto el patrón?

Necesito usar sed para reemplazar todo antes de hacer coincidir el patrón con otra cadena en un archivo

Hay varias rutas en mi archivo. Los últimos componentes de esas rutas son los mismos independientemente del usuario; sin embargo, los primeros componentes cambiarán.

Por ejemplo, parausuario 1, el archivo contiene la siguiente ruta

build:
   - "/Users/user1/Projects/Stash/sdk/license.txt"

Parausuario 2, el camino podría ser

build:
   - "/Users/user2/Documents/Work/sdk/license.txt"

Los últimos 2 componentes son, es decir, "/sdk/license.txt" son los mismos para todos los usuarios.

Quiero reemplazar todo lo anterior a estos componentes con la ruta proporcionada por el usuario, ya que es específica de ese usuario. ¿Cómo utilizar sed para realizar este tipo de sustitución? Estoy usando un script Perl para lo mismo.

Respuesta1

Simplemente puedes usar referencias retrospectivas.

sed -e 's/\(^[ ]*\- "\)\(.*\)\(\/sdk\/license\.txt"$\)/\1path_with_which_to_be_replaced\3/'

Aquí

\(....\)se usa para agrupar coincidencias y guardarlo para uso futuro, para usarlo en reemplazo, puede usarlo \1 \2como nombre de variable.

Entonces, en su requisito, rompo la línea en tres grupos.

\(^[ ]*\- "\)paraspace - "

\(.*\)para la pieza a sustituir, p. ej./Users/user2/Documents/Work

\(\/sdk\/license\.txt"$\)para la misma parte es decirsdk/license.txt"

información relacionada