如何将 xargs 与 ed 一起使用?

How to use xargs with ed?

我想在文件夹内递归地批量替换字符串,我已经决定使用 Perl。我想看看是否有一种解决方案可以减少依赖性并跨平台工作。

对于列表文件,我可以使用从 lsfindagrg 的任何内容。让我用 ls.

演示我的问题

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

我会得到这个:

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

由于管道用于将文件名传递给 xargs,而流(此处为字符串)似乎不起作用 ()。我想知道是否可以将 xargsed.

一起使用

我担心的是跨平台问题,实际上该命令将放在 package.json 中用于 npm run global_replace。我们想知道除了为这个任务引入 gulp-replacegulp 之外是否还有其他解决方案。

试试这个解决方案:

find . -name "*" | xargs sed -i 's/regex/replacestring/g'

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

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

而在 package.json 中,我必须转义每个 ",所以现在我们可以 运行 npm run replace。退出代码将是状态 1,虽然有效,但看起来不太好。

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