Ich schrieb dieses Shell-Skript.Warum schneidet der Bearbeitungsbefehl 's' die Datei ab, anstatt sie anzuhängen?
echo a: foo > a.txt
echo a: bar >> a.txt
echo a: baz >> a.txt
sed -i -e '/bar/{ w b.txt' -e 'd }' a.txt
sed -i -e '/baz/{ w b.txt' -e 'd }' a.txt
cat b.txt
Hier ist der Ausgang, den ich bekam.
a: baz
Aber ich habe diese Ausgabe erwartet.
a: bar
a: baz
erwartete ich diese Ausgabe, weil http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html sagt:
[2addr]w wfile
Append (write) the pattern space to wfile.
Da es sagt „anhängen“, war ich davon aus, dass der erste sed
Befehl a: bar
auf eine nicht vorhandene Datei anhängen würde, so zu schaffen, dass Datei. Dann würde der zweite sed
Befehl a: baz
an die gleiche Datei anhängen.
Aber die obige Ausgabe zeigt, dass dies nicht der Fall war.
Was ist falsch in meinem Verständnis?