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
CW Holeman II
la source

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 ...


la source
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


la source
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.

Brian Agnew
la source