在sed中匹配忽略相同单词和额外字符的单词

时间:2016-07-22 21:21:41

标签: regex bash shell sed

以下works in Javascript匹配:

name: Broadcaster
main: me.Orion31.broadcaster.Main
version: 1.0
commands:
   broadcast:
      description: Broadcast a message to the whole server!
      usage: /broadcast <message>
   bcset:
      description: Change the properties of the broadcaster.
      usage: /bcset tag,color <new value>

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

Sed测试示例:

[^\$]fileref.*

未找到匹配项的gnu sed(ubuntu或centOS)的输出:

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

期望的输出:

fileref=old
./executable $fileref

2 个答案:

答案 0 :(得分:2)

$之前的fileref 可以这样表达:”不是$或没有字符的字符所有在fileref

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

与Javascript相同:

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

答案 1 :(得分:0)

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

给出以下

fileref=replaced
./executable $fileref

通过输入[^ \ $],你要说的是在行的开头搜索$