特定のキーワードとその内容を特定するのに問題があります。これはサンプルファイルであり、実際のファイルはこれより大きいです。
はい
user@linux:~$ cat url.txt
abcrandomtextdef another random text blablabla
another random iwantthis text abcrandomtextdef url=https://www.google.com ghirandomtextjkl
ghirandomtextjkl another random text yadayada
wxyz iwantthis abcdef url=yahoo.com yaday
user@linux:~$
希望の出力は次のとおりです。
iwantthis url=https://www.google.com
iwantthis url=yahoo.com
これはその結果を得るための私の試みですが、見てわかるように実際には機能しません。
user@linux:~$ grep url= url.txt | cut -d ' ' -f3,6
iwantthis url=https://www.google.com
abcdef
user@linux:~$
答え1
sed
正しい仕事のようです。
% sed -n 's/.* \(iwantthis\) .* \(url=[^ ]*\) .*/\1 \2/p' url.txt
iwantthis url=https://www.google.com
iwantthis url=yahoo.com
動作原理:
-n
- "p"コマンドと一致する行のみを印刷します。
s/.../p
- 検索と置換、一致する行の印刷
.* \(iwantthis\) .* \(url=[^ ]*\) .*
- 空白で囲まれた「iwantthis」という単語を見つけて覚え、空白ではなく単語が後に続く「url =」も見つけて覚えます。.*
"iwantthis" 前の内容と両端の URL の後ろの内容は削除されます。
/\1 \2
- 覚えている2つの単語に置き換えてください。