小编Vra*_*all的帖子

将忽略任何注释匹配的 sed 命令

我正在尝试使用正则表达式创建 sed 命令,以便仅在没有注释的情况下替换文本文件中的某些内容,但由于我几乎不了解 sed 命令的知识,我遇到了一些麻烦。

我为问题的一小部分找到了解决方案,但有些还不够完整,或者我无法将它们放在一起。TL; DR 版本在最后可用。

让我们先确定我的最终目标

只有在没有注释的情况下,我才想在文本文件中匹配任何内容(如任何常规正则表达式(呵呵))。因为我想为多种语言做这件事,让我们只看常见的 C 注释。

因此,在这种情况下,可以以不同方式对单词或行进行注释。我们//只有评论线路上的下一个内容,我们还有/* */评论块。


环境

我目前正在使用仅支持 POSIX sed 的 Mac OSX,但我安装了一个我发现更好的 GNU-sed。(感谢Homebrew. 包是gnu-sed,命令是gsed。)所以,如果您喜欢使用其中一种或另一种,我可以使用它们。

我在写这篇文章时假设使用了 GNU-sed。


忽略一个案例

第一个问题,如何忽略某些情况。我在这个话题中很容易地发现了这一点

现在,这//部分对我来说似乎很容易做,我只需要添加一个OR ( |)条件即可将其与另一个条件连接起来。

它看起来像这样:

    sed -E "/\/\/.*/! s/foo/bar/" file
Run Code Online (Sandbox Code Playgroud)

然后,如果输入文件是:

foo
42
test
//foo
//42
//    foo
//something foo
foo
42
something foo
  foo
Run Code Online (Sandbox Code Playgroud)

输出是:

bar
42
test
//foo
//42
// …
Run Code Online (Sandbox Code Playgroud)

sed text-processing regular-expression

6
推荐指数
1
解决办法
2547
查看次数

标签 统计

regular-expression ×1

sed ×1

text-processing ×1