このようなファイルがあります。
text
another line
<script src="https://link/user/id/text.js></script>
text
<script src
URLとstageで始まる行を見つけたいです。ユーザーとIDのみを抽出すると、行全体が次の形式に置き換えられます。
[[ Link is here - user || id ]]
行全体を置き換える方法を知っていますが、私にとって難しいのは、そのクエリ行からユーザーとIDを抽出するためにそれを表現する方法です。
答え1
使用sed
$ sed -E '/^<script src/s~.*/([^/]*)/([^/]*)/[[:alnum:]]+\.js.*~[[ Link is here - \1 || \2 ]]~' input_file
text
another line
[[ Link is here - user || id ]]
text
/^<script src/
- 次から始まる行と一致します。<script src
s~
- デフォルトの区切り文字と競合しないように交換された区切り文字を変更します。
.*/([^/]*)/([^/]*)/[[:alnum:]]+\.js.*
- 最後から3番目のスラッシュの前のすべての項目を一致させます。次のスラッシュまで、括弧内にグループ1をキャプチャし、[^/]*
グループ2のキャプチャを繰り返し、その後に1つ以上の英数字、ピリオド、.
およびが続きますjs
。括弧内に含まれていない他のすべての項目を除外します。
[[ Link is here - \1 || \2 ]]~
\1
- 逆参照を含むキャプチャグループを返します。\2