如何使用find,-exec,grep和sed与正则表达式来替换部分文本?

9 regex macos sed find

好吧,我真的想在DeltaWalker中创建一个过滤器来忽略只有特定行差异的文件,这样我就能识别出其他源代码发生变化的文件.Stackoverflow正则表达式大师给了我几个很好的表达式,在OS X终端中产生了很好的find -exec grep结果,但对DeltaWalker结果没有影响.所以,我有另一个想法.

我记得一个名为SED工具,这是我没有经验......但是,我相信它可能与find的-exec开关被调用.所以,我有以下内容并想知道是否有人知道如何混合使用sed来替换匹配的文本行:"Copyright(c)2008 - 2009"with"Copyright(c)2008 - 2010"

find . -exec grep -Hn '^.*Copyright (c) 2008 - 2009' {} \;
Run Code Online (Sandbox Code Playgroud)

Sor*_*gal 13

你可以这么做

find . -exec sed -r -e 's/(^.*)Copyright \(c\) 2008 - 2009/\1Copyright (c) 2008 - 2010/g' {} \;
Run Code Online (Sandbox Code Playgroud)

我在这里假设你不想丢失任何版权之前的版本并且匹配的版本 .*

但是,根据您的输入,它可能很简单

find . -exec sed -e 's/2009/2010/g' {} \;
Run Code Online (Sandbox Code Playgroud)

请注意,在这两种情况下,我都没有修改文件,只是显示了修改内容的结果.我想在您真实的场景中,您希望将更改写回磁盘.为此你需要-i开关到sed,因此:

find . -exec sed -r -i'' -e 's/(^.*)Copyright \(c\) 2008 - 2009/\1Copyright (c) 2008 - 2010/g' {} \;
Run Code Online (Sandbox Code Playgroud)

值得注意的是,我在这里使用GNU sed语法.我没有方便测试的OS X盒,但BSD sed通常使用-E而不是-r打开扩展的正则表达式.