xargs:如何替换文字双引号?

tsc*_*oss 5 bash json curl xargs

我有一个带有 JSON-Objects 的源文件,每行一个,如下所示:

来源:

{"_id":"1","name":"one"}
{"_id":"2","name":"two"}
{"_id":"3","name":"three"}
Run Code Online (Sandbox Code Playgroud)

我想将每一行发送到

curl -X POST -H "application/json" myURL -d '<REPLACEMENT>'
Run Code Online (Sandbox Code Playgroud)

当我尝试时,双引号不会使其卷曲

<source xargs -I % curl -X POST -H "application/json" myURL -d '%'
Run Code Online (Sandbox Code Playgroud)

我尝试转义 curl 命令中的引号,后来我用 \" 替换了源文件中的所有双引号。我发现没有可用的版本。

另一种使用 seq 和 sed 将每一行写入临时文件的方法, curl -d @temp 对我不起作用。

是否有一个优雅的解决方案,或者我必须编写一个带有循环的脚本?

oog*_*oga 7

这是一个有趣的问题。必须有一个更好的解决方案(也许 konsolebox 正在解决某些问题),但是将所有替换为"with\"会起作用:

$ echo '"hello"'
"hello"
$ echo '"hello"' | xargs echo
hello
$ echo '"hello"' | sed 's/"/\\"/g' | xargs echo
"hello"
Run Code Online (Sandbox Code Playgroud)


Ole*_*nge 5

GNU Parallel 是专门为处理xargs特殊字符的错误处理而构建的:

<source parallel curl -X POST -H "application/json" myURL -d {}
Run Code Online (Sandbox Code Playgroud)

它不仅会正确引用 ",还会正确引用任何字符串,因此它会被curl 解释为单个参数。

额外的好处:您的查询将并行运行 - 每个 CPU 一个查询。