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
?
如果您可以确定字符串 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)