使用sed在行的开头和结尾添加引号

时间:2015-05-26 13:33:31

标签: regex sed

我知道<script> function init() { var imgDefer = document.getElementsByTagName('img'); for (var i = 0; i < imgDefer.length; i++) { if (imgDefer[i].getAttribute('data-src')) { imgDefer[i].setAttribute('src',imgDefer[i].getAttribute('data-src')); } } } window.onload = init; </script> 适用于行的开头,而sed 's/^/"/g'适用于结尾,但为什么sed 's/$/"/g'不适用于这两者?

3 个答案:

答案 0 :(得分:4)

[^$]表示“除美元符号外的任何字符”。所以说sed 's/[^$]/"/g'您要用"替换所有字符,$除外(credits to Ed Morton):

$ echo 'he^llo$you' | sed 's/[^$]/"/g'
""""""$"""

要说:匹配^$,您需要使用( | )表达式:

sed 's/\(^\|$\)/"/g' file

或者,如果-r中有sed

sed -r 's/(^|$)/"/g' file

测试

$ cat a
hello
bye
$ sed -r 's/(^|$)/"/g' a
"hello"
"bye"

答案 1 :(得分:2)

sed 's/.*/"&"/' YourFile 

使用完整行作为模式替换&

在这种情况下,g不需要,因为每行只有1次出现整行(sed的默认行为逐行读取)

答案 2 :(得分:0)

sed -e 's/^/"/' -e 's/$/"/' filename.txt
"tag1"
"tag2"

这也可以满足您的目的,您也可以使用任何其他模式更改双引号(“),例如:

sed -e 's/^/<<</' -e 's/$/>>>' data.txt
<<<tag1>>>
<<tag2>>>