Ich möchte das 5. Wort jeder Zeile in einer Datei löschen.
Der aktuelle Inhalt der Datei:
File is not updated or and will be removed
System will shut down f within 10 seconds
Please save your work 55 or copy to other location
Kindly cooperate with us D
Erwartete Ausgabe:
File is not updated and will be removed
System will shut down within 10 seconds
Please save your work or copy to other location
Kindly cooperate with us
text-processing
sed
awk
pmaipmui
quelle
quelle
-f
wird in meinemcut
(GNU) zumindest nicht unterstützt ..--complement
Flagge , um die Dinge zu vereinfachen:cut --complement -d ' ' -f5
. Denken Sie daran, die Ausgabe in eine neue Datei umzuleiten und dannmv
über die Originaldatei zu verschieben.awk: entferne das fünfte feld
Wenn Sie die Datei direkt speichern möchten: /programming//q/16529716/7552
Sie können den Inhalt des 5. Feldes einfach löschen, es bleiben jedoch 2 aufeinanderfolgende Trennzeichen für die Ausgabefelder:
quelle
Mit POSIX sed:
quelle
_
nichts anderes als:blank:
oder:space:
?\(
Erfassungsgruppe\)
?glenn bot eine lösung an, die äquivalent zu ist
Wie er und andere darauf hingewiesen haben, ist dies
Ein Hack, um das dritte Problem zu beheben, ist
Dadurch verbleiben am Ende einer Zeile, in der fünf oder weniger Wörter eingegeben wurden, noch ein oder mehrere Leerzeichen. Wenn Sie ein Wort identifizieren können, das in der Eingabe niemals vorkommt,
wird auch damit umgehen (aber es bleibt immer noch Probleme 1 und 2).
quelle
Eine robustere (sed nehmen Sie das längste mögliche Muster und Muster mit
*
könnte Trennung oder Wort in der ersten Version verfehlen), aber eine etwas längere Versionquelle
sed 's/[^[:blank:]]*//5'
sed 's/[[:blank:]*[^[:blank:]]*//5'
ist besser. Sehr guter Punkt. Ich vermutete, dass sed jedes einzelne Zeichen als Einheitsed 's/[[:blank:]][^[:blank:]]*//4'
entfernt das 5. Feld vollständig.sed 's/[[:blank:]][^[:blank:]][^[:blank:]]*//4'
, oder, w / GNU / BSD / toyboxsed
s:sed -E 's/[[:blank:]][^[:blank:]]+//4'
.Perl.
quelle
Eine andere Möglichkeit, vorausgesetzt, GNU-Cut:
quelle
Verwenden von Perl> 5.10 (und erfolgreiches Ausgeben aller Zeilen: 0)): -
quelle