批处理实现把txt中windows换行符改成linux换行符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了批处理实现把txt中windows换行符改成linux换行符相关的知识,希望对你有一定的参考价值。

RT
在Windows下实现

参考技术A linux下删除windows换行符^M

OJ判题时发现一个问题:用%c读入的代码都会报wa。后来发现跟scanf有关。在linux下使用%c会读到\n和\r两个字符。所以需要将^M(也就是\r)字符删掉
删除方法不少。找了一个比较简单的。
要将a.txt里的^M去掉并写入b.txt,则使用如下指令cat a.txt | tr -d "^M" > b.txt
注意:语句中的^M是通过ctrl+V, ctrl+M输入的。特指/r字符

unix 下换行符只有: \r
Dos 下换行符有:\r\n
具体的, \r的ascii 码是:14
\n的ascii 码是:10
参考技术B 用高级一点儿的文本编辑器,如EditPlus,WinHex,UltraEdit,Vim都可以
打开,再另存为,选格式
参考技术C linux 有现成的命令
dos2unix
使用方法

dos2unix tt.txt

如果提示命令找不到
请执行安装
yum install dos2unix
参考技术D 在linux下么?直接有一个dos2unix命令可以完成这个任务。

如果提示没有找到命令,yum或apt-get一下,我试过CentOS和Ubuntu都没问题的。

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

基本上,我想从file.txt中读取内容

apple
banana
carrot

并写入newfile.txt,以便它有内容

apple banana carrot

我需要在没有安装权限的Windows计算机上执行此操作。

我试过了

set row=
for /f %%x in (file.txt) do set row=%row% %%x
echo row > newfile.txt

我尝试使用PowerShell语句(我无法运行PowerShell脚本)而不是CMD风格的for循环。

powershell -Command "(Gc file.txt) | Foreach-Object -Process {set row=%row% _$} | Out-File newFile.txt"

但两者都产生一个空文件。有没有办法做到这一点?

答案

Get-Content将文件的内容作为行数组返回,并且已经删除了换行符,因此您需要做的就是(在PowerShell中)加入行并将结果写回文件:

(Get-Content 'input.txt') -join ' ' | Set-Content 'output.txt'

不推荐,但如果你必须批量执行此操作,则需要以下内容:

@echo off
setlocal EnableDelayedExpansion
set row=
for /f %%x in (file.txt) do set "row=!row! %%x"
>newfile.txt echo %row%

请注意,此操作需要延迟扩展。如果没有它,循环体中的%row%将在解析时扩展(当变量仍为空时),因此在循环完成后,您将最终得到变量中输入文件的最后一行。在启用延迟扩展(并使用!row!而不是%row%)的情况下,变量在运行时扩展,即在循环迭代期间扩展,正如人们通常所期望的那样。

有关延迟扩展的更多信息,请参阅Raymond Chen's blog

另一答案

补充Ansgar Wiechers' helpful answer

从批处理文件/ cmd.exe控制台窗口执行以下命令应该可以执行以下操作:

powershell -command ""$(Get-Content file.txt)" > newFile.txt"
  • 注意嵌入的"作为"的转义,PowerShell在从外部调用时需要(相比之下,PowerShell内部,`是转义字符)。
  • 使用子表达式运算符Get-Content file.txt$(...)调用(以双引号字符串形式输出一行)包含在内,意味着数组元素每个都隐式连接一个空格。

但请注意,PowerShell的输出重定向运算符>默认创建UTF16-LE(“Unicode”)编码文件,Out-File也是如此(至少在Windows PowerShell中;跨平台PowerShell核心默认为(无BOM) UTF-8)。

要控制输出编码,请使用-Encoding参数,该参数可以应用于Out-File,或者最好 - 知道正在输出字符串 - Set-Content

在Windows PowerShell中,请注意Set-Content - 与> / Out-File相反 - 默认为传统“ANSI”代码页隐含的编码,通常为Windows-1252。

以上是关于批处理实现把txt中windows换行符改成linux换行符的主要内容,如果未能解决你的问题,请参考以下文章

文本文档格式下,如何把一列数据改为连续的行数据?

批处理参数换行问题

bat 如何实现换行

bat批处理怎样实现txt文件按标记换行?

dos 批处理 如果不换行追加内容到文件。

windows xp系统如何转换linux系统传过来的文本内回车换行符的问题