
Preciso usar o sed para substituir tudo antes de combinar o padrão com outra string em um arquivo
Existem vários caminhos no meu arquivo. Os últimos componentes desses caminhos são os mesmos, independentemente do usuário; no entanto, os primeiros componentes serão alterados.
Por exemplo, parausuário 1, o arquivo contém o seguinte caminho
build:
- "/Users/user1/Projects/Stash/sdk/license.txt"
Parausuário 2, o caminho poderia ser
build:
- "/Users/user2/Documents/Work/sdk/license.txt"
Os últimos 2 componentes são, ou seja, "/sdk/license.txt"são iguais para todos os usuários.
Quero substituir tudo antes desses componentes pelo caminho fornecido pelo usuário, pois é específico para esse usuário. Como usar o sed para realizar esse tipo de substituição? Estou usando um script Perl para o mesmo.
Responder1
Você pode simplesmente usar referências anteriores
sed -e 's/\(^[ ]*\- "\)\(.*\)\(\/sdk\/license\.txt"$\)/\1path_with_which_to_be_replaced\3/'
Aqui
\(....\)
é usado para agrupar a correspondência e salvá-la para uso futuro; para usar em substituição, você pode usar \1
\2
como nome de variável.
Então, na sua exigência, eu quebro a linha em três grupos
\(^[ ]*\- "\)
paraspace - "
\(.*\)
para peça a ser substituída, por exemplo/Users/user2/Documents/Work
\(\/sdk\/license\.txt"$\)
para a mesma parte, ou sejasdk/license.txt"