Regex 使用sed替换注释前同一行中的多个实例

Regex 使用sed替换注释前同一行中的多个实例,regex,bash,sed,Regex,Bash,Sed,我试图使用sed将命令的所有实例替换为变量,当它们出现在注释之后或是另一个单词的一部分时除外。我已经接近了,能够在注释之前替换一个实例,但如果有多个实例,就不能 我有一个测试文件,其中有一行: rm#rm 我想这样说: $RM$RM#RM 这就是我到目前为止所做的: sed-i的/\(^\\[^[\\.]]\)\brm\b/\1$RM/'文件1 返回: $RM#RM 非常感谢您的帮助。其他不涉及sed的解决方案是受欢迎的,但我可能需要一些帮助来理解它们 谢谢 编辑: 这只是我正在寻找的一个例子。

我试图使用sed将命令的所有实例替换为变量,当它们出现在注释之后或是另一个单词的一部分时除外。我已经接近了,能够在注释之前替换一个实例,但如果有多个实例,就不能

我有一个测试文件,其中有一行:
rm#rm

我想这样说:
$RM$RM#RM

这就是我到目前为止所做的:
sed-i的/\(^\\[^[\\.]]\)\brm\b/\1$RM/'文件1

返回:
$RM#RM

非常感谢您的帮助。其他不涉及sed的解决方案是受欢迎的,但我可能需要一些帮助来理解它们

谢谢

编辑:

这只是我正在寻找的一个例子。不是每一行都会这样格式化,也不是每一行都会在注释前包含命令,反之亦然。我只是在寻找一个解决方案,也将涵盖类似于此示例的情况。对不起,没有解释。下面是一个稍微好一点的例子:

   "$#"    #rm
#  rm
rm   #  rm
  rm
"rm  "
'rm  '
`rm  `
{rm  }
$#  rm  # rm
rm rm # rm
rm # rm rm
rmremovermlink
输出应为:

  "$#"    #rm
#  rm
$RM   #  rm
  $RM
"$RM  "
'$RM  '
`$RM  `
{$RM  }
$#  $RM  # rm
$RM $RM # rm
$RM # rm rm
rmremovermlink
如果这是你要找的,请告诉我。它匹配:

$RM $RM # rm

您可以使用此
perl
命令进行此替换:

perl -pe 's/(?<!\$)#.*$(*SKIP)(*F)|\brm\b/\$RM/g' file
   "$#"    #rm
#  rm
$RM   #  rm
  $RM
"$RM  "
'$RM  '
`$RM  `
{$RM  }
$#  $RM  # rm
$RM $RM # rm
$RM # rm rm
rmremovermlink

perl-pe的/(?您可以使用以下sed命令:

sed ':a;s/^\([^#]*\)\<rm\>/\1$RM/;ta;' file
#    ^  ^   ^       ^   ^  ^      ^---- go to label "a" if something is replaced
#    |  |   |       |   |  '---- back-reference to capture group 1
#    |  |   |       '---'---- word boundaries
#    |  |   '---- capture group 1
#    |  '---- replacement (only one occurrence)
#    '---- defines the label "a"
sed”:a;s/^\([^\\]*\)\/\1$RM/;ta;'文件
#^^^^^^^^----如果某件东西被替换,则转到标签“a”
#| | | | |'——返回到捕获组1的引用
#| | |-----单词边界
#| |“--捕获组1
#|'----替换(仅一次)
#'----定义标签“a”

所以,我想我的问题不太清楚。对不起,我正在寻找一种方法来替换命令,而不知道它可能在哪里。这个答案适用于这种特定情况,但不幸的是,我不知道这些行将如何格式化。你能提供两个示例来代替你问题中的示例进行测试吗。谢谢。什么以上输入文件的预期输出是什么?不,不,不在注释中。用预期输出更新问题。效果非常好!感谢包含RegEx演示。这对理解为什么一切都是这样非常有帮助。
sed ':a;s/^\([^#]*\)\<rm\>/\1$RM/;ta;' file
#    ^  ^   ^       ^   ^  ^      ^---- go to label "a" if something is replaced
#    |  |   |       |   |  '---- back-reference to capture group 1
#    |  |   |       '---'---- word boundaries
#    |  |   '---- capture group 1
#    |  '---- replacement (only one occurrence)
#    '---- defines the label "a"