GNU/Linux >> Linux の 問題 >  >> Linux

パターンの後にコンテンツをgrepする方法は?

sed -n 's/^potato:[[:space:]]*//p' file.txt

Grep は制限された Sed と考えることができ、Sed は一般化された Grep と考えることができます。この場合、Sed は、必要な機能を備えた優れた軽量ツールの 1 つですが、もちろん、それを行うための合理的な方法が他にもいくつかあります。


grep -Po 'potato:\s\K.*' file

-P Perl正規表現を使用する

-o 一致のみを出力する

\s potato: の後のスペースに一致する

\K 一致を省略する

.* 残りの文字列と一致する


または、正規表現アサーションを使用します:grep -oP '(?<=potato: ).*' file.txt


grep 'potato:' file.txt | sed 's/^.*: //'

grep 文字列 potato: を含む行を探します 、次に、これらの行ごとに sed 置換 (s/// - 置換) 任意の文字 (.* ) 行頭から (^ ) シーケンス : の最後の発生まで (コロンの後にスペース) 空の文字列 (s/...// - 最初の部分を空の 2 番目の部分に置き換えます)。

または

grep 'potato:' file.txt | cut -d\   -f2

potato: を含む各行 、 cut 行をスペースで区切られた複数のフィールドに分割します (-d\ - d =デリミタ、\ =-d" " のような空白文字のエスケープ 同様に機能します)、そのような各行の 2 番目のフィールドを出力します (-f2 ).

または

grep 'potato:' file.txt | awk '{print $2}'

potato: を含む各行 、 awk 2 番目のフィールドを出力します (print $2 ) は、デフォルトでスペースで区切られています。

または

grep 'potato:' file.txt | perl -e 'for(<>){s/^.*: //;print}'

potato: を含むすべての行 インラインに送信されます (-e ) stdin からすべての行を取得する Perl スクリプト

または

awk '{if(/potato:/) print $2}' < file.txt

ファイルは stdin 経由で送信されます (< file.txt stdin 経由でファイルの内容を送信します 左側のコマンドへ) awk potato: を含む各行のスクリプト (if(/potato:/) 正規表現 /potato:/ の場合に true を返します 上記のように、2 番目のフィールドを出力します。

または

perl -e 'for(<>){/potato:/ && s/^.*: // && print}' < file.txt

ファイルは stdin 経由で送信されます (< file.txt 、上記を参照) 上記と同様に機能する Perl スクリプトに変換しますが、今回は各行に文字列 potato: が含まれていることも確認します。 (/potato:/ 現在の行に potato: が含まれている場合に一致する正規表現です 、そしてそうであれば (&& )、次に上記の正規表現の適用に進み、結果を出力します)。


Linux
  1. Rm後にXfsデータを回復する方法は?

  2. ケイトがクラッシュした後に回復する方法は?

  3. Grep一致しないファイルの表示を抑制する方法は?

  1. Linux – Dmesgで何をgrepするかを知る方法は?

  2. ファイル内の複数行パターンを検索するにはどうすればよいですか?

  3. 連続ストリームを「grep」する方法は?

  1. Grep一致後のファイルの行数をカウントする方法は?

  2. カラー出力をgrepする方法

  3. Bashでファイルが空かどうかを確認するには?