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

0

Eu preciso usar o sed para substituir tudo antes de corresponder ao 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 Para o usuário 1 , o arquivo contém o seguinte caminho

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

Para usuário 2 , o caminho pode ser

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

Os últimos 2 componentes são, por exemplo, " /sdk/license.txt " são os mesmos para todos os usuários.

Eu quero substituir tudo antes desses componentes pelo caminho fornecido pelo usuário, pois ele é específico para esse usuário. Como usar o sed para realizar esse tipo de substituição? Eu estou usando um script Perl para o mesmo.

    
por Neeraj Damle 28.08.2018 / 06:02

1 resposta

1

Você pode simplesmente usar backreferences

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

aqui

\(....\) é usado para agrupar correspondência e salvá-la para uso futuro, para usar em substituição, você pode usar como nome da variável.

Então, na sua exigência, eu divido a linha em três grupos

\(^[ ]*\- "\) para space - "

\(.*\) para a parte a ser substituída, por exemplo, /Users/user2/Documents/Work

\(\/sdk\/license\.txt"$\) para a mesma parte, por exemplo, sdk/license.txt"

    
por 28.08.2018 / 08:26

Tags