每次这种情况出现,大约每隔几个月出现一次,我花了太长时间试图找出一个bash脚本,它正是我想要的。我很确定我想要的与其他人想要的相似,但是当我快速搜索时,在线上可用的脚本往往过于简单化,并且不做这些事情(而且我自己的bash脚本编写技能还不足以解决问题):
它需要递归(遍历整个文件夹树)
它必须允许我选择文件类型(例如“*.js”),因为有时文件夹树包含不应搜索的二进制文件和其他文件类型
它应该替换现有的文本,编辑现有的文件
它不应该导致源代码管理(git,svn)认为文件已经被修改了,除非它实际上已经被修改了(我不知道为什么,但是sed似乎这样做了)
它应该允许正则表达式
最简单的方法是什么?我的意思是,我可以用python编写一个脚本,它只需要几行代码,但我觉得这应该很容易在shell中完成。
最佳答案
我通常会这样做:
find . -name '*.hpp' -o -name '*.cpp' | xargs grep -l StuffToEdit
然后我看看我是否得到感兴趣的文件。如果是,我会在管道中添加:
| xargs sed -i 's@StuffToEdit@NewStuffInstead@g'
让我们撕开。
如果sed让你的风投认为文件没有被更改,你应该看看差异。也许您在diff中关闭了空白,但这就是改变的地方(行尾等)?
我相信会有人来指出,我在上面使用xargs的一种或两种方法都是不必要的,但对于一次性工作来说,这并不重要。无论如何,我更喜欢这些多程序管道来完成这类任务,因为我可以很容易地禁用或交换某些过滤器,并在结果不正确的情况下检查其他过滤器的结果。
关于bash - 正确搜索和替换源代码的最简单方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8611822/