2

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

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

RELEASE_AND_NIL(_theNameOfAVariable);

我想转换所有出现,覆盖文件:

[_theNameOfAVariable release];

..请指点?我认为之前有人向我展示了如何使用 sed 执行此操作,但我忘了那是很久以前的事了。

谢谢

编辑

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

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

3 回答 3

1

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

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

所以你可以这样做:

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

如果你有一堆源文件,你可以使用findand xargs

find . -type f -print0 | xargs -0 sed -ie "s/RELEASE_AND_NIL(\(.*\))/[\1 release\]/g"
于 2012-08-23T21:12:33.773 回答
0
sed -r 'RELEASE_AND_NIL\(([^(]+)\)/[\1 release]/' your_file.txt > target_file.txt
于 2012-08-23T21:12:08.027 回答
0

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

sed -e 's/ *RELEASE_AND_NIL(\(.*\));/[\1 release];/'
于 2012-08-23T21:12:15.513 回答