好吧,我真的想创建一个在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' {} \;
答案 0 :(得分:13)
你可以这么做
find . -exec sed -r -e 's/(^.*)Copyright \(c\) 2008 - 2009/\1Copyright (c) 2008 - 2010/g' {} \;
我在这里假设您不想丢失版权之前就行的任何内容,并与.*
匹配
但是,根据您的输入,它可能就像
一样简单find . -exec sed -e 's/2009/2010/g' {} \;
请注意,在这两种情况下,我都没有修改文件,只是显示了修改内容的结果。我想在您真实的场景中,您希望将更改写回磁盘。为此,您需要-i开关到sed,因此:
find . -exec sed -r -i'' -e 's/(^.*)Copyright \(c\) 2008 - 2009/\1Copyright (c) 2008 - 2010/g' {} \;
值得注意的是,我在这里使用GNU sed语法。我没有方便测试的OS X盒,但BSD sed通常使用-E而不是-r来打开扩展的正则表达式。