awkで特定の文字の後の行からテキストを削除するにはどうすればよいですか


12

awkを使用して、特定の文字「;」の後のすべてのテキストを削除するにはどうすればよいですか。それは私のテキストファイルのすべての行に表示されますか?(次に、テキストでforループを実行する必要があります)

Jenny,Sarah,John;North Dakota

Henry,Frank;Illinois

Aaron,Kathryn,Caitlin,Harris;New York

1
実際のテキストファイルを見せてください、このようなことで詳細に悪魔がいます。
terdon

私は今例を挙げました@terdon
Jenny

回答:


18

2つの一般的なアプローチがあります。

  1. 設定しawk、その文字へのフィールドセパレータ。次に、必要な部品を次のように取得できます$1

    $ echo "Today was cloudy; yesterday too" | awk -F';' '{print $1}'
    Today was cloudy
    
  2. gsub()空の文字列に置き換えるために使用します。

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

したがって、あなたの例では:

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

Henry,Frank

Aaron,Kathryn,Caitlin,Harris

4

答えは次のとおりsedです。実際にはフィールド処理を行っていないので、awkはおそらくやりすぎです。

sed 's/;.*//'

1
+1ですが、OPのコメントに基づいて、これはすべて大きなスクリプトの一部であると想定しています。@ジェニー、それはちなみにあなたが質問に含めるべき種類の詳細です。
terdon


0

特定の単語の後のすべての文字を別の文字列に置き換えたい場合があります。例えば:

original_string="abc blabla foo bar" blablaの後の単語を「hello world」に置き換えたい

echo $original_string | sed -E 's/(.+ blabla) .+/\1 hello world/'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.