Como usar o sed para substituir todo o resto por outra string, exceto o padrão?

Como usar o sed para substituir todo o resto por outra string, exceto o padrão?

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

informação relacionada