Localize a posição e faça uma alteração usando sed


11

Este script usa sed para mudar todos "" para "coisas novas". Como alguém mudaria apenas o "" após o aaaa: usando sed ou qualquer outra coisa?

cat >sample.txt <<EOF
xxx:
""
yyy:
""
}
EOF
sed --expression='s/""/"new stuff"/' sample.txt

Respostas:


8

Eu posso não entender sua pergunta. Se você deseja substituir SOMENTE o valor após 'aaaa', use a resposta anterior. Se você deseja substituir QUALQUER valor após 'aaaa', tente este procedimento:

sed --expression='/yyy/,$ s/""/"new stuff"/g' sample.txt

Ainda não o testou: D ...


3

Resposta obtida de O'Reilly - Sed & Awk 2ª adição Ao redor da página 152

Escreva um script em um arquivo

/yyy\:$/{
N
s/yyy\:\n\"\"/yyy\:\
\"new stuff\"/
}

Aplique isso aos seus dados com o método usual

script sed -f sample.txt

Este script diz procurar yyy :. Quando encontrado, leia outra linha no buffer de padrão (soa como Star Trek Transporter). Agora faça como / comando nas linhas unidas. Então, estamos procurando por aaaa: nova linha "". Se encontrado, substitua por aaaa: \ observe a nova linha real com barra invertida e, em seguida, "coisas novas"

Boa sorte


1
consulte a página man: unixhelp.ed.ac.uk/CGI/man-cgi?sed busca de parágrafo endereços

1

Acho que quando as coisas ultrapassam um certo nível de complexidade, mudo para o perl . O s2p tratará da tradução da sua solução sed atual. Ou você pode escrevê-lo do zero trivialmente. A expressão de pesquisa / substituição permanecerá a mesma.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.