![如何使用 sed 提取子字符串并将其添加到原始字符串中?](https://linux22.com/image/1440071/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20sed%20%E6%8F%90%E5%8F%96%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%B9%B6%E5%B0%86%E5%85%B6%E6%B7%BB%E5%8A%A0%E5%88%B0%E5%8E%9F%E5%A7%8B%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%EF%BC%9F.png)
我正在尝试编写一个 sh 脚本,它接收一个字符串作为输入,提取一个特定的子字符串并将其添加到输入字符串的指定表达式之后。我尝试了很多次sed -i'N
... 但都没有用。
这是输入字符串的示例:
<img src="images/Button-7.jpg" width="251" height="129" border="0" alt=""></a></td>
这就是我想要得到的输出:
<img src="images/Button-7.jpg" name="Button-7" width="251" height="129" border="0" alt=""></a></td>
按照以下方法操作即可。但我必须手动声明每个按钮。
VarA='Button-7.jpg'
VarB='Button-7.jpg" name="Button-7'
sed "s/${VarA}/${VarB}/g" index.html > temp.html
mv temp.html index.html
答案1
在我看来,您需要使用组捕获和反向引用才能使其正常工作。 稍微研究了一下这些概念,我得出了以下对我理解的用例非常有效的方法:
sed 's#src="images/\(.*\).jpg"#& name="\1"#'
有趣的是:
- 使用
#
作为分隔符而不是常规的/
。这使得推理更容易,因为它不需要在模式中转义正斜杠。 - 使用(转义的)括号捕获组内的输入。
- 重新使用整场比赛
&
(帽子提示:G-man)。 - 反向引用替换文本中的捕获组(
\1
)。