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
Jenny
quelle
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
terdon
quelle
4

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

sed 's/;.*//'
Chris Down
quelle
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
4

Und auch nur cut..

cut -d\; -f1 file
Scrutinizer
quelle
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/'
Kemin Zhou
quelle