我有一个curl
命令:
curl -H "Accept: application/json" -H "content-type: application/x-www-form-urlencoded" -X POST -d "*****messsage_request******" https://******/api/ > "C:\Users\abc\Desktop\outputfile.json"
此输出为JSON格式(我将此输出显示为一行):
[{"title_name":"abc","title_number":"1","title_des":"this is the title \r\nof the new song\r\n abc","add_comments":"Yes, I like \r\nthis song"},{"title_name":"efgh","title_number":"2","title_des":"\r\nthis is the title of the new song efgh","add_comments":"would\r\n there be parking spot\r\n"}]
我想从中删除\r\n
。 \r\n
可以在任何地方。
我试图替换:
-d
使用:
--data-binary
但这没用。
我可以使用批处理文件,或者我认为curl可以过滤,但是我不确定,因为我并没有使用太多。
答案 0 :(得分:0)
这是一个可能的解决方案:
@echo off
(curl -H "Accept: application/json" -H "content-type: application/x-www-form-urlencoded" -X POST -d "*****messsage_request******" https://******/api/)>"C:\Users\abc\Desktop\outputfile.json"
for /F "delims=" %%A IN (C:\Users\abc\Desktop\outputfile.json) do (
set "line=%%A"
)
echo %line:\r\n=%
这里有些一般性的内容(从上面改编):
@echo off
(curl -H "Accept: application/json" -H "content-type: application/x-www-form-urlencoded" -X POST -d "*****messsage_request******" https://******/api/)>"C:\Users\abc\Desktop\outputfile.json"
for /F "delims=" %%A IN (C:\Users\abc\Desktop\outputfile.json) do (
set "line=%%A"
call echo %line:\r\n=%
)
这将echo
输出到cmd,但文件将保留和 \r\n
。要同时修改文件,请使用:
@echo off
(curl -H "Accept: application/json" -H "content-type: application/x-www-form-urlencoded" -X POST -d "*****messsage_request******" https://******/api/)>"C:\Users\abc\Desktop\outputfile.json"
for /F "delims=" %%A IN ('type "C:\Users\abc\Desktop\outputfile.json"') do (
set "line=%%A"
call echo %line:\r\n=%>"C:\Users\abc\Desktop\outputfile.json"
)
但是,建议的方法如下:
@echo off
for /F "delims=" %%A IN ('curl -H "Accept: application/json" -H "content-type: application/x-www-form-urlencoded" -X POST -d "*****messsage_request******" https://******/api/') do (
set "line=%%A"
call echo %line:\r\n=%>"C:\Users\abc\Desktop\outputfile.json"
)
这是很多分拣器。
%line:\r\n=%
的意思是在变量line
(文件的内容)中搜索字符串\r\n
,并将其替换为{=
),因此,将其删除。 / p>
注意:您已经提到curl
命令包含&
。将其替换为^&
以使其正常工作!
答案 1 :(得分:0)
IMO PowerShell更适合处理Json输出,尤其是多行数据
## Q:\Test\2019\02\14\SO_54696007.ps1
# $Json = curl.exe --% -H "Accept: application/json" -H "content-type: application/x-www-form-urlencoded" -X POST -d "*****messsage_request******" https://******/api/
# simulateed input
$Json = '[{"title_name":"abc","title_number":"1","title_des":"this is the title \r\nof the new song\r\n abc","add_comments":"Yes, I like \r\nthis song"},{"title_name":"efgh","title_number":"2","title_des":"\r\nthis is the title of the new song efgh","add_comments":"would\r\n there be parking spot\r\n"}]'
$Table = $JSon | ConvertFrom-Json
$Table | Out-GridView
示例输出:
答案 2 :(得分:0)
任何合理的批处理解决方案都会在环境变量字符串中操纵字符串。但是批处理可以处理的最大可变长度约为8191个字符。可以想象CURL输出可能超过该长度,因此纯批处理可能不是一个好选择。
Windows有许多本机脚本语言可以轻松处理任意长度的文本,例如JScript,VBScript,PowerShell。
还有一些易于使用的第三方命令行工具,可以处理文本,包括unix实用程序的Windows端口。例如,可以在Windows中找到sed。
我会使用JREPL.BAT regular expression text processor实用程序,因为我总是很方便,它既简单又方便:-)它是纯脚本(混合批处理/ JScript),可以在XP以后的任何Windows计算机上本地运行-无需第三方exe。
curl --YourArguments | jrepl \r\n "" /L >"yourOutputFile.json"
或
curl --YourArguments | jrepl \r\n "" /L /O "yourOutputFile.json"
/L
选项将搜索项视为字符串文字,这就是您想要的。
如果要先捕获curl输出,然后使用JREPL进行后处理,则
curl --YourArguments >"yourOutputFile.json"
call jrepl \r\n "" /L /F "yourOutputFile.json" /O -
答案 3 :(得分:0)
对于Unix-y解决方案,如何
curl ... things | awk "{printf("\""%s"\"",$0)}' >output
(从Gawk documentation收集的DOS引用;我希望它仍然是最新的。)