2016-07-22 60 views
0

以下works in Javascript作为搭配:匹配字忽略额外字符同一个词在sed

[^\$]fileref.* 

然而,在sed正则表达式不匹配任何东西。我想在忽略变量标识符的情况下替换bash文件中的变量引用。前提是我有一个默认的占位符文件,需要使用sed -i从shell脚本更新。我无法找到为什么sed对此表达式有问题的原因。

桑达试验例:

echo -e 'fileref=old\n./executable $fileref' | sed 's/[^\$]fileref.*/fileref=replaced/g' 

从GNU输出的sed(Ubuntu或者CENTOS),其中没有发现匹配:

fileref=old 
./executable $fileref 

希望的输出:

fileref=replaced 
./executable $fileref 
+0

sed逐行工作,“fileref”之前没有字符。如果你想匹配一行的开始,使用'^'锚点。顺便说一句,你不需要在字符类中转义'$'。 –

回答

2

“没有$fileref可以表达这样的开始搜索$:“字符这不是一个$或没有字符在所有前fileref

echo -e 'fileref=old\n./executable $fileref' | sed 's/\([^$]\|^\)fileref.*/\1fileref=replaced/g' 

同样用javascript:

var result = str.replace(/([^$]|^)fileref.*/, '$1fileref=replaced'); 
0
echo -e 'fileref=old\n./executable $fileref' | sed 's/^fileref.*$/fileref=replaced/g' 

给出以下

fileref=replaced 
./executable $fileref 

通过把你说的[^ \ $]在一行