如何将 xargs 与 ed 一起使用?
How to use xargs with ed?
我想在文件夹内递归地批量替换字符串,我已经决定使用 Perl。我想看看是否有一种解决方案可以减少依赖性并跨平台工作。
对于列表文件,我可以使用从 ls
到 find
到 ag
、rg
的任何内容。让我用 ls
.
演示我的问题
ls | xargs -I '{}' ed -s {} <<< $'='
我会得到这个:
Is a directory
newline appended
=: No such file or directory
由于管道用于将文件名传递给 xargs
,而流(此处为字符串)似乎不起作用 ()。我想知道是否可以将 xargs
与 ed
.
一起使用
我担心的是跨平台问题,实际上该命令将放在 package.json
中用于 npm run global_replace
。我们想知道除了为这个任务引入 gulp-replace
和 gulp
之外是否还有其他解决方案。
试试这个解决方案:
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在评论中的帮助!
我想在文件夹内递归地批量替换字符串,我已经决定使用 Perl。我想看看是否有一种解决方案可以减少依赖性并跨平台工作。
对于列表文件,我可以使用从 ls
到 find
到 ag
、rg
的任何内容。让我用 ls
.
ls | xargs -I '{}' ed -s {} <<< $'='
我会得到这个:
Is a directory
newline appended
=: No such file or directory
由于管道用于将文件名传递给 xargs
,而流(此处为字符串)似乎不起作用 (xargs
与 ed
.
我担心的是跨平台问题,实际上该命令将放在 package.json
中用于 npm run global_replace
。我们想知道除了为这个任务引入 gulp-replace
和 gulp
之外是否还有其他解决方案。
试试这个解决方案:
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在评论中的帮助!