匹配多个文件中的一行并进行修改

时间:2012-08-23 21:06:13

标签: regex bash sed

如果有人对正则表达式有好处,替换字符串和bash - 你可以帮我一个大忙:

我在一个目录中有一堆源文件,这些文件在不同的地方都有。该行可能前面有空格。

  

RELEASE_AND_NIL(_theNameOfAVariable);

我想转换所有出现的内容,用以下内容覆盖文件:

  

[_ theNameOfAVariable release];

..有什么指针吗?我想有人告诉我如何在sed之前做到这一点,但我忘记了很久以前。

由于

修改

我最后使用的实际命令是:(感谢@fardjad)

 find . -name '*.m' -print0 | xargs -0 sed -i "" "s/RELEASE_AND_NIL(\(.*\))/[\1 release\]/g"

3 个答案:

答案 0 :(得分:1)

您可以使用sed -i执行就地替换,正则表达式替换模式为:

s/RELEASE_AND_NIL\((.*?)\)/\[\1 release\]/g

所以你可以这样做:

sed -ie "s/RELEASE_AND_NIL(\(.*\))/[\1 release\]/g" /path/to/your/file

如果您有大量源文件,可以使用findxargs

find . -type f -print0 | xargs -0 sed -ie "s/RELEASE_AND_NIL(\(.*\))/[\1 release\]/g"

答案 1 :(得分:0)

sed -r 'RELEASE_AND_NIL\(([^(]+)\)/[\1 release]/' your_file.txt > target_file.txt

答案 2 :(得分:0)

如果我理解正确_theNameOfAVariable可能是任何东西,那么这应该做你需要的:

sed -e 's/ *RELEASE_AND_NIL(\(.*\));/[\1 release];/'