如何在ed中使用xargs?

时间:2018-11-09 04:58:42

标签: pipe xargs heredoc ed herestring

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

对于列出文件,我可以使用从lsfindagrg的任何内容。我用ls证明了我的问题。

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

我会得到这个:

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

由于使用管道将文件名传递给xargs,因此流(此处为字符串)似乎不起作用(How can heredocs be used with xargs?)。我想知道是否可以将xargsed一起使用。

我关心的是跨平台,实际上命令将放置在package.json的{​​{1}}中。我们想知道是否有其他解决方案,而不是仅为此任务引入npm run global_replacegulp-replace

2 个答案:

答案 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在评论中的帮助!