Regex 匹配单词忽略sed中具有额外字符的相同单词

Regex 匹配单词忽略sed中具有额外字符的相同单词,regex,bash,shell,sed,Regex,Bash,Shell,Sed,以下为匹配项: [^\$]fileref.* 但是,在sed中,正则表达式与任何内容都不匹配。我想替换bash文件中的变量引用,同时忽略变量标识符。前提是我有一个默认的占位符文件,需要使用sed-I从shell脚本更新该文件。我找不到sed对此表达式有问题的原因 Sed测试示例: echo -e 'fileref=old\n./executable $fileref' | sed 's/[^\$]fileref.*/fileref=replaced/g' 未找到匹配项的gnu sed(ubu

以下为匹配项:

[^\$]fileref.*
但是,在sed中,正则表达式与任何内容都不匹配。我想替换bash文件中的变量引用,同时忽略变量标识符。前提是我有一个默认的占位符文件,需要使用sed-I从shell脚本更新该文件。我找不到sed对此表达式有问题的原因

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
给出以下内容

fileref=replaced
./executable $fileref
输入[^\$]就是说在行首搜索$

给出以下内容

fileref=replaced
./executable $fileref
通过输入[^\$]您是说在一行的开头搜索$,“在
fileref
之前没有
$
”可以这样表达:“一个字符不是
$
或者在
fileref
之前根本没有字符。”

Javascript也是如此:

var result=str.replace(/([^$]|^)fileref.*/,“$1fileref=replaced”);
“在
fileref
之前没有
$
”可以这样表示:“一个字符不是
$
或者在
fileref
之前根本没有字符。”

Javascript也是如此:

var result=str.replace(/([^$]|^)fileref.*/,“$1fileref=replaced”);

sed逐行工作,“fileref”前面没有字符。如果要匹配行首,请使用
^
锚定。另一方面,您不需要在character类中转义
$
。sed逐行工作,在“fileref”之前没有字符。如果要匹配行首,请使用
^
锚定。另外,您不需要在字符类中转义
$
echo -e 'fileref=old\n./executable $fileref' | sed 's/\([^$]\|^\)fileref.*/\1fileref=replaced/g'