【发布时间】:2019-04-12 16:35:33
【问题描述】:
我想在一个文件夹中递归地批量替换字符串,我已经决定使用 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 中,用于npm run global_replace。我们想知道除了为这个任务引入gulp-replace 和gulp 之外是否还有其他解决方案。
【问题讨论】:
-
你想在 ed 中运行什么命令?
$'='被 shell(ANSI-C 引用)缩减为=,并将打印当前行的行号,即最后一行。 -
@BenjaminW。对不起,不好的例子。另一个可能是
$'2,5d\nw',即删除这些行并保存。我的意思是证明 herestring 不起作用。
标签: pipe xargs heredoc ed herestring