匹配单词忽略sed中带有额外字符的相同单词
Posted
技术标签:
【中文标题】匹配单词忽略sed中带有额外字符的相同单词【英文标题】:Match word ignoring same word with extra character in sed 【发布时间】:2016-11-26 21:17:45 【问题描述】:以下works in javascript 匹配:
[^\$]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
【问题讨论】:
sed 逐行工作,"fileref" 前没有字符。如果要匹配行首,请使用^
锚点。顺便说一句,您不需要在字符类中转义 $
。
【参考方案1】:
“fileref
之前没有$
”可以这样表达:“一个不是$
的字符或者在fileref
之前根本没有字符”
echo -e 'fileref=old\n./executable $fileref' | sed 's/\([^$]\|^\)fileref.*/\1fileref=replaced/g'
与 Javascript 相同:
var result = str.replace(/([^$]|^)fileref.*/, '$1fileref=replaced');
【讨论】:
【参考方案2】:echo -e 'fileref=old\n./executable $fileref' | sed 's/^fileref.*$/fileref=replaced/g'
给出以下内容
fileref=replaced
./executable $fileref
输入 [^\$] 表示要在行首搜索 $
【讨论】:
以上是关于匹配单词忽略sed中带有额外字符的相同单词的主要内容,如果未能解决你的问题,请参考以下文章