Suchen Sie die Position und nehmen Sie eine Änderung mit sed vor

11

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
CW Holeman II
quelle

Antworten:

8

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


quelle
3

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


quelle
1
siehe Manpage: unixhelp.ed.ac.uk/CGI/man-cgi?sed Suche nach Adressen Absatz
1

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.

Brian Agnew
quelle