各行で特定の単語を検索し、残りの行を印刷します。

各行で特定の単語を検索し、残りの行を印刷します。

サーバーのURLを含むテキストファイルがあります。たとえば、次のようになります。

request get https://abc.net/search?q=hello/world/hello/word/search=5&size=10
request get https://abc.net/search?q=hello/world/hello/world/hello/word=5

このテキストファイルでは、文字列 "search?q="の後のテキストを別のファイルである出力ファイルに保存したいと思います。

hello/world/hello/word/search=5&size=10
hello/world/hello/word/hello/world=5
hello1world1/hello/world/hello/word

ベストアンサー1

sed -n '/search?q=/{s/.*search?q=//;p;}' infile > outfile

説明する:

/search?q=/この正規表現を含む行にのみ適用できる次のコマンドセット(中括弧)を作成します。

s/.*search?q=//最初の部分を2番目の部分(空)に置き換えます。

その後、pラインを印刷します。

この-nフラグはデフォルトでこの行の印刷を無効にします。

実際、次のように単純化できます。

sed -n '/.*search?q=/{s///;p;}' infile > outfile

コマンドに入力したパターンをs/空白のままにすると、最後に使用したパターンが再利用されるためです。


編集:コメントの簡略化を指摘したRobertLに感謝します。

sed -n 's/.*search?q=//p' infile > outfile

これは、置換が行われたときにのみその行を印刷するためにコマンドpのフラグを使用します。s

おすすめ記事