Dieses Skript verwendet sed, um alle "" in "neue Sachen" zu ändern. Wie würde man nur das "" nach dem JJJ ändern: mit sed oder irgendetwas anderem?
cat >sample.txt <<EOF
xxx:
""
yyy:
""
}
EOF
sed --expression='s/""/"new stuff"/' sample.txt
Ich könnte Ihre Frage nicht verstehen. Wenn Sie NUR den Wert nach 'JJJ' ersetzen möchten, verwenden Sie die vorherige Antwort. Wenn Sie JEDE Werte nach 'JJJ' ersetzen möchten, versuchen Sie diesen Einzeiler:
sed --expression='/yyy/,$ s/""/"new stuff"/g' sample.txt
Habe es nicht getestet: D ...
Antwort von O'Reilly - Sed & Awk 2. Ergänzung um Seite 152
Schreiben Sie ein Skript in eine Datei
/yyy\:$/{
N
s/yyy\:\n\"\"/yyy\:\
\"new stuff\"/
}
Wenden Sie dies wie gewohnt auf Ihre Daten an
sed -f script sample.txt
Dieses Skript sagt suchen nach yyy:. Wenn gefunden, lesen Sie eine weitere Zeile in den Musterpuffer (klingt wie Star Trek Transporter). Führen Sie nun den Befehl / in den verbundenen Zeilen aus. Also suchen wir yyy: newline "". Wenn gefunden, ersetzen Sie durch yyy: \ Beachten Sie den Backslash der tatsächlichen Newline, dann "new stuff"
Viel Glück
Sobald die Dinge ein bestimmtes Maß an Komplexität überschreiten, wechsle ich zu Perl . s2p übernimmt die Übersetzung Ihrer aktuellen sed-Lösung. Oder Sie könnten es trivial von Grund auf neu schreiben. Der Such- / Ersetzungsausdruck bleibt gleich.
quelle