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