如何使用批处理文件或curl从文本文件中删除“ \ r \ n”?

时间:2019-02-14 17:29:14

标签: batch-file curl

我有一个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可以过滤,但是我不确定,因为我并没有使用太多。

4 个答案:

答案 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

示例输出:

enter image description here

答案 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引用;我希望它仍然是最新的。)