如果我有字符串:
path1=/path/me & you/file.json&path2=/path/you & me/file.txt
我希望输出如下:
path1=/path/me & you/file.json;path2=/path/you & me/file.txt
我需要替换&
,因为它的前后均不包含space
,我尝试使用sed
,但我一直得到这个
path1=/path/me ; you/file.json;path2=/path/you ; me/file.txt
答案 0 :(得分:1)
您可以使用[^ ]
来匹配非空格字符,并确保其位于\(capture group\)
中,以便可以在替换字符串中引用它:
sed -e 's/\([^ ]\)&\([^ ]\)/\1;\2/'
这会找到non-space
&
non-space
的任意三个字符序列,并将其替换为两个捕获的字符,从而有效地替换了任何&
,且其旁边没有空格。 / p>
这将影响foo&bar
,但不会影响foo & bar
或foo& bar
或&foo
答案 1 :(得分:0)
sed -r 's/(\S)&(\S)/\1;\2/g'
-r启用正则表达式,而\ S则是空格除外。
答案 2 :(得分:0)
我猜也许你在找
sed 's/&\([a-z][a-z0-9]*=\)/;\1/g'
即仅替换分号,其后紧跟一个标记和一个等号。 (您可能必须根据令牌的外观来调整令牌的定义。例如,通常支持下划线,但很少使用下划线。您也希望支持大写。)
如果可能的话,请修复产生这些值的过程,因为格式本质上是模棱两可的。