
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
\2
como 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"