我想以递归方式批量替换文件夹中的字符串,并且已经使用Perl解决了。我想看看是否有一种解决方案,它需要更少的依赖并且可以跨平台工作。
对于列出文件,我可以使用从ls
到find
到ag
,rg
的任何内容。我用ls
证明了我的问题。
ls | xargs -I '{}' ed -s {} <<< $'='
我会得到这个:
Is a directory
newline appended
=: No such file or directory
由于使用管道将文件名传递给xargs
,因此流(此处为字符串)似乎不起作用(How can heredocs be used with xargs?)。我想知道是否可以将xargs
与ed
一起使用。
我关心的是跨平台,实际上命令将放置在package.json
的{{1}}中。我们想知道是否有其他解决方案,而不是仅为此任务引入npm run global_replace
和gulp-replace
。
答案 0 :(得分:0)
尝试以下解决方案:
find . -name "*" | xargs sed -i 's/regex/replacestring/g'
答案 1 :(得分:0)
经过一些调查,并非完全不可能使用herestring:
find ... | xargs -0 -I{} sh -c 'ed -s "$1" <<< '"$',s/foo/bar/g\nw'" -- {}
在package.json
中,我必须转义每个"
,所以现在我们可以运行npm run replace
。退出代码的状态为1,尽管可以正常工作,但看起来并不好。
非常感谢@ Benjamin.W在评论中的帮助!