使用 sed 对变量进行 grep 并将其与同一行上的插入文本一起复制

rof*_*imp 2 sed text-processing

我想 grep 所有title="<text>"变量,例如title="best-pencil",并将其复制alt="best-pencil"到 Linux 上的 HTML 文件中的同一行:

<p class="images"><img src="my-favorite-pencil.jpg" title="best-pencil">
Run Code Online (Sandbox Code Playgroud)

到:

<p class="images"><img src="my-favorite-pencil.jpg" title="best-pencil" alt="best-pencil">
Run Code Online (Sandbox Code Playgroud)

这如何使用sed

ter*_*don 6

如果您可以确定字符串 i) 将始终在双引号中并且永远不会包含" 并且 ii) 始终仅在一行上,那么这很简单:

$ sed -E 's/title=("[^"]*")/& alt=\1/' file
<p class="images"><img src="my-favorite-pencil.jpg" title="best-pencil" alt="best-pencil">
Run Code Online (Sandbox Code Playgroud)

诀窍是寻找title="后跟 0 或更多非"直到下一个"并“捕获”它(这就是周围括号的("[^"]*")作用),因此我们可以将其称为\1. 在 中sed,该&符号的意思是“任何匹配的”。所以,在这里,我们title="foo"用它自己替换,然后是alt="foo".

如果您的sed版本不支持-E,则可以改用它:

$ sed 's/title=\("[^"]*"\)/& alt=\1/' file
<p class="images"><img src="my-favorite-pencil.jpg" title="best-pencil" alt="best-pencil">
Run Code Online (Sandbox Code Playgroud)