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