Localisez la position puis effectuez un changement en utilisant sed


11

Ce script utilise sed pour changer tout "" en "nouveau". Comment changer juste le "" après le yyy: utiliser sed ou autre chose?

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

Réponses:


8

Je ne comprends peut-être pas votre question. Si vous souhaitez remplacer UNIQUEMENT la valeur après «yyy», utilisez la réponse précédente. Si vous souhaitez remplacer TOUTES les valeurs après 'yyy', essayez ce one-liner:

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

Je ne l'ai pas testé: D ...


3

Réponse glanée d'O'Reilly - Sed & Awk 2nd Addition Around page 152

Écrire un script dans un fichier

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

Appliquez ceci à vos données avec l'habituel

sed -f script sample.txt

Ce script dit chercher yyy :. Une fois trouvé, lisez une autre ligne dans le tampon de motif (sonne comme Star Trek Transporter). Maintenant, faites comme / commande sur les lignes jointes. Nous recherchons donc yyy: newline "". S'il est trouvé, remplacez-le par yyy: \ notice barre oblique inversée réelle puis "nouveau"

Bonne chance


1
voir la page de manuel : unixhelp.ed.ac.uk/CGI/man-cgi?sed paragraphe pour la recherche d'adresses

1

Je trouve une fois que les choses dépassent un certain niveau de complexité, je passe en perl . s2p se chargera de la traduction de votre solution sed actuelle. Ou vous pouvez l'écrire à partir de zéro trivialement. L'expression de recherche / remplacement restera la même.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.