私は使用しますsed
:
sed -n 's%.*<url>\(.*\)</url>.*%\1%p'
この-n
オプションは、デフォルトの印刷をオフにします。置換コマンドは、1 行の<url>
と</url>
タグに一致し、その間にあるものをキャプチャして、先頭と末尾の要素を一致に含めます。交換はキャプチャされた素材であり、p
手段は印刷されます。が正規表現に表示されるため、代わりに%
inを使用しました。別の方法は、スラッシュを使用し、バックスラッシュで正規表現のスラッシュをエスケープすることです。s%%%
s///
/
Perl も実行可能でシンプルです。
perl -n -e 'print if s%.*<url>(.*)</url>.*%\1%'
-n
デフォルトでは印刷されないことを除いて、REPL を作成します。これprint
は、代替操作が代替を行う場合にのみトリガーされます。
そして、このやや洗練された Perl スクリプトは<url>...</url>
、1 行の複数のエントリを正しく処理します。
perl -n -e 'print "$1\n" while (s%.*?<url>(.*?)</url>%%)'
貪欲でない正規表現 ( .*?
) を使用して、大量の情報を消費しないようにします。置換操作はオプションの前のゴミを検出して削除<url>...</url>
しますが、コードは URL マーカー間の一致部分とそれに続く改行を出力します。
与えられたデータ:
xyz <url>/localhost/index1.html</url> pqr
xyz <url>/localhost/index2.html</url> abc <url>/localhost/index3.html</url> pqr
<url>/localhost/index4.html</url>
<url>/localhost/index5.html</url><url>/localhost/index6.html</url>
xyz <url>/localhost/index7.html</url> abc <url>/localhost/index3.html</url> xyz <url>/localhost/index9.html</url> abc <url>/localhost/index0.html</url> pqr
最後の Perl スクリプトは以下を生成します。
/localhost/index1.html
/localhost/index2.html
/localhost/index3.html
/localhost/index4.html
/localhost/index5.html
/localhost/index6.html
/localhost/index7.html
/localhost/index3.html
/localhost/index9.html
/localhost/index0.html