Encontre e substitua por sed usando o curinga em encontrar e substituir

1

Então, eu entendo como usar sed , ou seja, ao pesquisar usando curingas, .* . O problema que estou enfrentando é como localizar e substituir usando o caractere curinga nas duas vezes, nas partes de pesquisa e substituição do comando. Um exemplo ajudará a ilustrar melhor isso:

$cat test.txt
a(bc)
a(l)
a(d)
a(loke)
a(babab)
a(h323)
$

Eu quero acrescentar uma string, _mynewstring , ao que vier depois de a([string of some length] . Por favor note que não posso simplesmente encontrar e substituir o parêntese de fechamento porque há outros parênteses de fechamento em cada linha (o que deixo de fora para facilitar o exemplo), mas nenhum cujo parêntese de abertura tem um a na frente dele. A saída deve se parecer com:

$cat test.txt
a(bc_mynewstring)
a(l_mynewstring)
a(d_mynewstring)
a(loke_mynewstring)
a(babab_mynewstring)
a(h323_mynewstring)
$

Eu tentei o seguinte,

sed -i 's/a(.*)/a(.*_mynewstring)/g' test.txt

mas isso apenas gera,

cat test.txt
a(.*_mynewstring)
a(.*_mynewstring)
a(.*_mynewstring)
a(.*_mynewstring)
a(.*_mynewstring)
a(.*_mynewstring)

É evidente que o caractere curinga está sendo usado como uma string literal, o que não é o que eu preciso, mas depois de pesquisá-lo exaustivamente, não sei ao certo como faria isso de outra forma. Eu tentei soluções usando awk , grep e combinações de todos os três sem sucesso. Obrigado por qualquer ajuda que você possa fornecer.

    
por knishs_bankroll 28.03.2017 / 21:32

1 resposta

1

Saia do ( e pesquise não ) . Use para manter o agrupamento correspondente.

sed 's/a\(([^)]*\))/a_mynewstring)/g' file1

Dá:

a(bc_mynewstring)
a(l_mynewstring)
a(d_mynewstring)
a(loke_mynewstring)
a(babab_mynewstring)
a(h323_mynewstring)
    
por 28.03.2017 / 21:41