我有一个这样的文件
text
another line
<script src="https://link/user/id/text.js></script>
text
<script src
我想找到以URL开头和阶段的行。我只需要提取用户和 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.*
- 匹配倒数第三个正斜杠之前的所有内容,在括号内捕获捕获组 1 直到下一个正斜杠[^/]*
,重复捕获组 2,后跟一个或多个字母数字字符、句点.
和js
。排除括号内未捕获的所有其他内容。
[[ Link is here - \1 || \2 ]]~
\1
- 返回带有反向引用的捕获组\2