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:
が含まれている場合に一致する正規表現です 、そしてそうであれば (&&
)、次に上記の正規表現の適用に進み、結果を出力します)。