0

我想在一个文件夹中递归地批量替换字符串,我已经使用 Perl 解决了。我想看看是否有一个解决方案需要更少的依赖和跨平台工作。

对于列出文件,我可以使用从lstofindag,的任何东西rg。Lemme 用ls.

ls | xargs -I '{}' ed -s {} <<< $'='

我会得到这个:

Is a directory newline appended =: No such file or directory

由于管道用于将文件名传递给xargs,并且流(此处为字符串)似乎无法正常工作(如何将 heredocs 与 xargs 一起使用?)。我想知道是否可以使用xargswith ed

我关心的是跨平台,实际上该命令将放在package.json. 我们想知道除了引入和仅针对此任务npm run global_replace之外是否还有其他解决方案。gulp-replacegulp

4

2 回答 2

0

经过一番调查,使用 herestring 并非完全不可能:

find ... | xargs -0 -I{} sh -c 'ed -s "$1" <<< '"$',s/foo/bar/g\nw'" -- {}

而在package.json,我每个人都要逃跑",所以现在我们可以逃跑了npm run replace。退出代码将是状态 1,虽然它可以工作,但它看起来并不好。

非常感谢@Benjamin.W 在评论中提供的帮助!

于 2018-11-09T08:48:43.053 回答
0

试试这个解决方案:

find . -name "*" | xargs sed -i 's/regex/replacestring/g'
于 2018-11-09T06:31:47.083 回答