【发布时间】:2016-10-08 14:24:53
【问题描述】:
我正在尝试对多个文件中的文件内容执行递归搜索和替换。
在许多文件中给出以下内容:
example:{
something: 'ha',
somethingElse: 'ah'
}
我想结束:
example:{
something: 'ha',
somethingElse: 'ah',
somethingNew: 'ah ha'
}
在 Mac OS X 上,我正在从父目录中的命令行尝试以下操作:
find . -type f -exec perl -p -i -e "s/somethingElse:(.*)/somethingElse:$1,\n\tsomethingNew: 'ah ha'/g" {} \;
除了捕获组被解释为空白之外,它几乎可以工作,导致:
example:{
something: 'ha',
somethingElse:,
somethingNew: 'ah ha'
}
有什么问题?
也没有绑定到perl,我不介意另一种方法(例如可以使用sed)
【问题讨论】:
-
你需要使用单引号。 $1 在 perl 之前由 bash 解释,因此当 perl 看到它时它是空的。或者只是转义它,因为您在替换中使用单引号。
\$ -
感谢 @123 这也是一个替代修复
-
看起来有点像 JSON 或其他结构化数据格式。是吗?因为如果是这样,正则表达式可能就不是这项工作的工具了。
-
抱歉,无法详细说明。如果它是 JSON,并且您说 500 个文件只是想稍微调整一下,为什么不使用正则表达式呢?还有什么?