awk / sed 找到一行并将其替换为短语

awk / sed 找到一行并将其替换为短语

我有一个这样的文件

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

相关内容