如何使用批处理文件或curl从我的文本文件中删除' r n'?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用批处理文件或curl从我的文本文件中删除' r n'?相关的知识,希望对你有一定的参考价值。

我有一个curl命令:

curl -H "Accept: application/json" -H "content-type: application/x-www-form-urlencoded" -X POST -d "*****messsage_request******" https://******/api/ > "C:UsersabcDesktopoutputfile.json"

它的输出是JSON格式(我把这个输出放在一行):

[{"title_name":"abc","title_number":"1","title_des":"this is the title 
of the new song
 abc","add_comments":"Yes, I like 
this song"},{"title_name":"efgh","title_number":"2","title_des":"
this is the title of the new song efgh","add_comments":"would
 there be parking spot
"}]

我想从中删除 可以在任何地方。

我试图替换:

-d

附:

--data-binary

但它没有用。

我可以使用批处理文件或者我认为curl有一种方法可以过滤,但我不确定,因为我没有使用过多。

答案

IMO PowerShell更适合处理Json输出,尤其是多行数据

## Q:Test2019214SO_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 
of the new song
 abc","add_comments":"Yes, I like 
this song"},{"title_name":"efgh","title_number":"2","title_des":"
this is the title of the new song efgh","add_comments":"would
 there be parking spot
"}]'

$Table = $JSon | ConvertFrom-Json
$Table | Out-GridView

样本输出:

enter image description here

另一答案

任何合理的批处理解决方案都会操纵环境变量字符串但批处理可以处理的最大可变长度大约为8191个字符。可以想象,CURL输出可能超过该长度,因此纯批次可能不是一个好的选择。

Windows中有许多原生脚本语言可以轻松处理任意长度的文本,例如JScript,VBScript,PowerShell。

还有随时可用的第三方命令行工具,可以操作文本,包括unix实用程序的Windows端口。例如,可以在Windows中找到sed。

我会使用我的JREPL.BAT regular expression text processor实用程序,因为我总是把它放在手边,它简单方便:-)它是纯脚本(混合批处理/ JScript),可以在任何Windows机器上从XP开始本地运行 - 不需要第三方exe。

curl --YourArguments | jrepl 
 "" /L >"yourOutputFile.json"

要么

curl --YourArguments | jrepl 
 "" /L /O "yourOutputFile.json"

/L选项将搜索词视为字符串文字,这是您想要的。

如果您想先捕获curl输出,然后使用JREPL进行后处理,那么

curl --YourArguments >"yourOutputFile.json"
call jrepl 
 "" /L /F "yourOutputFile.json" /O -
另一答案

对于Unix-y解决方案,怎么样

curl ... things | awk "{printf("""%s""",$0)}' >output

(DOS引用从Gawk documentation收集;我希望它仍然是最新的。)

另一答案

这是一个可能的解决方案:

@echo off

(curl -H "Accept: application/json" -H "content-type: application/x-www-form-urlencoded" -X POST -d "*****messsage_request******" https://******/api/)>"C:UsersabcDesktopoutputfile.json"

for /F "delims=" %%A IN (C:UsersabcDesktopoutputfile.json) do (
    set "line=%%A"
)
echo %line:
=%

这里更通用(从上面改编):

@echo off

(curl -H "Accept: application/json" -H "content-type: application/x-www-form-urlencoded" -X POST -d "*****messsage_request******" https://******/api/)>"C:UsersabcDesktopoutputfile.json"

for /F "delims=" %%A IN (C:UsersabcDesktopoutputfile.json) do (
    set "line=%%A"
    call echo %line:
=%
)

这个,将echo输出到cmd,但该文件将保留 。要修改文件,请使用:

@echo off

(curl -H "Accept: application/json" -H "content-type: application/x-www-form-urlencoded" -X POST -d "*****messsage_request******" https://******/api/)>"C:UsersabcDesktopoutputfile.json"

for /F "delims=" %%A IN ('type "C:UsersabcDesktopoutputfile.json"') do (
    set "line=%%A"
    call echo %line:
=%>"C:UsersabcDesktopoutputfile.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:
=%>"C:UsersabcDesktopoutputfile.json"
)

这是一个很好的分拣机。

%line: =%意味着在变量line(文件内容)中搜索字符串 并用任何东西替换它(=),所以只需删除它。

注意:您已经提到过curl命令包含&。用^&替换它以使其工作!

以上是关于如何使用批处理文件或curl从我的文本文件中删除' r n'?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用批处理或PowerShell从文本文件中删除换行符

删除回车的批处理文件(新行)

如何有效处理大文件中间的插入或删除?

Django 1.7 + Django CMS - 从我的仓库中删除迁移文件或在仓库中包含 virtualenv?

如何从我的随机访问文件中删除记录?

如何从我的项目中删除不必要的资源?