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

11

Este script usa sed para mudar tudo "" para "novo material". Como se mudaria apenas o "" após o yyy: usando sed ou qualquer outra coisa?

cat >sample.txt <<EOF
xxx:
""
yyy:
""
}
EOF
sed --expression='s/""/"new stuff"/' sample.txt
    
por C.W.Holeman II 16.06.2009 / 21:18

3 respostas

8

Eu não entendi sua pergunta. Se você quiser substituir SOMENTE o valor depois de 'yyy', use a resposta anterior. Se você quiser substituir quaisquer valores depois de 'yyy', tente este one-liner:

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

Ainda não testei: D ...

    
por 16.06.2009 / 22:02
3

Resposta obtida da O'Reilly - Sed & Awk 2nd Addition Por volta 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 habitual

sed -f script exemplo.txt

Este script diz procurar yyy: Quando encontrado ler outra linha no buffer padrão (soa como Star Trek Transporter). Agora faça um s / comando nas linhas unidas. Então estamos procurando yyy: newline "". Se for encontrado, substitua por yyy: \ note que a barra invertida é real nova linha depois "coisas novas"

Boa sorte

    
por 16.06.2009 / 21:57
1

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

    
por 16.06.2009 / 21:23

Tags