Ersetzen Sie einfach vom ersten bis zum letzten |
durch ein |
(oder ein Leerzeichen, wenn Sie es vorziehen):
sed 's/|.*|/|/'
Beachten Sie, dass es zwar keine spezielle sed
Implementierung |
gibt (solange über oder in einigen Implementierungen keine erweiterten regulären Ausdrücke aktiviert sind ), in einigen Fällen jedoch eine besondere Implementierung vorliegt, z . B. in GNU . Also solltest du nicht-E
-r
\|
sed
entkommen, |
wenn Sie beabsichtigen, dass es mit dem |
Charakter übereinstimmt .
Wenn Sie durch Leerzeichen ersetzen und die Eingabe möglicherweise bereits Zeilen mit nur einem enthält |
, müssen Sie dies als besonders behandeln|.*|
es bei diesen nicht übereinstimmt. Das könnte sein:
sed 's/|\(.*|\)\{0,1\}/ /'
(das ist machen die .*|
Teil optional) Oder:
sed 's/|.*|/ /;s/|/ /'
oder:
sed 's/\([^|]*\).*|/\1 /'
Wenn Sie das erste und das achte Feld unabhängig von der Anzahl der Felder in der Eingabe wünschen, dann ist es nur:
cut -d'|' -f1,8
(Alle funktionieren mit jedem POSIX - kompatiblen Dienstprogramm, vorausgesetzt, die Eingabe bildet gültigen Text. (Insbesondere sed
funktionieren diese im Allgemeinen nicht, wenn die Eingabe Bytes oder Folgen von Bytes enthält, die im aktuellen Gebietsschema keine gültigen Zeichen bilden, wie zum Beispiel printf 'unix|St\351phane|Chazelas\n' | sed 's/|.*|/|/'
in ein UTF-8-Gebietsschema)).