如何使用sed在带引号的等号后找到并包围所有单词

时间:2012-03-24 22:16:37

标签: regex unix sed

例如

输入

<url wiki=https://wiki.archlinux.org/index.php/Main_Page forums=https://bbs.archlinux.org/>

期望的输出

<url wiki="https://wiki.archlinux.org/index.php/Main_Page" forums="https://bbs.archlinux.org/">

这是一个开始的示例命令,用“=”替换=。在我的简单思想中,有一些方法可以让它在等于之后搜索下一个单词并将其包含在内。我不确定这是否存在,但感谢任何帮助。

echo "<url wiki=https://wiki.archlinux.org/index.php/Main_Page forums=https://bbs.archlinux.org/>" | sed 's/=/"&"/'

2 个答案:

答案 0 :(得分:2)

您建议的正则表达式(sed 's/=/"&"/')会将=替换为"=",这不是您所需要的。这似乎对您的示例数据正常工作:

sed -e 's/=\([^" >][^ >]*\)/="\1"/g'

替换等号后跟非空白,非引号,非大于和一串其他非空白,非大于字符的字符,带有等号,双引号,记住的字符串和另一个双引号,在每一行全球。

答案 1 :(得分:0)

sed 's/\(=\)\([^ >]*\)/\1"\2"/g'

=符号后捕获非空格字符串序列,并用引号将其括起来