0
我试图执行递归搜索并替换多个文件中的文件内容。搜索并替换unix命令行,perl捕获组为空
鉴于以下若干文件:
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" {} \;
它几乎工作,除了捕获组被解释为空白导致我n:
example:{
something: 'ha',
somethingElse:,
somethingNew: 'ah ha'
}
什么问题?
而且不依赖于perl
,我不介意的替代方法(可以使用sed
例如)
您需要使用单引号。 $ 1在perl之前由bash解释,因此perl在看到它时是空的。或者只是逃避它,因为你在替换中使用单引号。 '\ $' – 123
谢谢@ 123这也是一种替代修复 –
看起来有点像JSON或其他结构化数据格式。是吗?因为如果是这样,正则表达式可能不是工作的工具。 – Sobrique