Wie kann ich mit awk den Text aus einer Zeile nach einem bestimmten Zeichen entfernen?


12

Wie kann ich awk verwenden, um den gesamten Text nach einem bestimmten Zeichen zu entfernen? ";" das erscheint in jeder Zeile meiner Textdatei? (Ich muss dann für Schleifen im Text laufen)

Jenny,Sarah,John;North Dakota

Henry,Frank;Illinois

Aaron,Kathryn,Caitlin,Harris;New York

1
Bitte zeigen Sie uns die eigentliche Textdatei, der Teufel steckt im Detail mit so etwas.
Terdon

Ich gab jetzt ein Beispiel @terdon
Jenny

Antworten:


18

Es gibt zwei allgemeine Ansätze.

  1. Setzen Sie awkdas Feldtrennzeichen auf dieses Zeichen. Sie können dann die gewünschten Teile erhalten als $1:

    $ echo "Today was cloudy; yesterday too" | awk -F';' '{print $1}'
    Today was cloudy
  2. Verwenden Sie, gsub()um es durch eine leere Zeichenfolge zu ersetzen:

    $ echo "Today was cloudy; yesterday too" | awk '{sub(/;.*/,""); print}'
    Today was cloudy

Also, für Ihr Beispiel:

$ awk -F';' '{print $1}' file
Jenny,Sarah,John

Henry,Frank

Aaron,Kathryn,Caitlin,Harris

4

Hier ist eine Antwort mit sed- da Sie eigentlich keine Feldverarbeitung durchführen, ist awk wahrscheinlich übertrieben.

sed 's/;.*//'

1
+1, aber basierend auf den Kommentaren des OP gehe ich davon aus, dass dies alles Teil eines größeren Skripts ist. @ Jenny, das ist übrigens die Art von Detail, die Sie in Ihre Fragen aufnehmen sollten.
Terdon


0

Manchmal möchten Sie möglicherweise alle Zeichen nach einem bestimmten Wort durch eine andere Zeichenfolge ersetzen. Zum Beispiel:

original_string="abc blabla foo bar" und Sie möchten Wörter nach blabla durch "Hallo Welt" ersetzen

echo $original_string | sed -E 's/(.+ blabla) .+/\1 hello world/'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.