入力する:
<a href="docs/2015-05-foobar/foobar.sh">foobar.sh</a>
出力
<a href="foobar.sh">foobar.sh</a>
質問:「docs/2015-05-foobar/」を削除するにはどうすればよいですか?文字列は「
答え1
echo '<a href="docs/2015-05-foobar/foobar.sh">foobar.sh</a>' |\
sed 's/\(.*\)href="\(.*\)\/\(.*\)"\(.*\)/\1href="\3"\4/'
あなたのため:
<a href="foobar.sh">foobar.sh</a>
コンテキストがある場合は、sed
適切なHTMLパーサーを使用して項目を検索し、パーサーが提供するアクセス方法を使用して見つかった要素<a>
にhref
アクセスします。
これらの\(.*\)
部分は何でも一致し、一致するコンテンツはスタンバイコールバック\1
で使用できます。\3
追加の文字(href="
、、、)は一致する必要があります(スラッシュは代替パターンの開始と終了を示すためにも使用されるため、エスケープされます。一致は貪欲であるため、\/
2番目の文字の前の最後のスラッシュはnotで一致します)。必要に応じて一致する部分を出力から削除します。"
\/
"
\2
答え2
そしてsed
:
$ echo '<a href="docs/2015-05-foobar/foobar.sh">foobar.sh</a>' |
sed -e 's,".*/\([^/]*"\),"\1,'
<a href="foobar.sh">foobar.sh</a>