我一直使用d2u
来转换行尾。安装了Puppy Linux后,我注意到它没有d2u
,而是dos2unix
。接着我发现Ubuntu默认都没有这两个。
有没有其他的方法可以转换行尾呢?
我一直使用d2u
来转换行尾。安装了Puppy Linux后,我注意到它没有d2u
,而是dos2unix
。接着我发现Ubuntu默认都没有这两个。
有没有其他的方法可以转换行尾呢?
一些选项:
tr
tr -d '\15\32' < windows.txt > unix.txt
或者
tr -d '\r' < windows.txt > unix.txt
perl
perl -p -e 's/\r$//' < windows.txt > unix.txt
sed
sed 's/^M$//' windows.txt > unix.txt
或者
sed 's/\r$//' windows.txt > unix.txt
^M
,您需要键入CTRL-V
,然后键入CTRL-M
。使用POSIX来做这件事情有些棘手:
POSIX Sed 不支持 \r
或 \15
。即使支持,原地替换选项-i
也不是POSIX标准
POSIX Awk 支持 \r
和 \15
,但 -i inplace
选项不是POSIX标准
d2u 和 dos2unix 不是POSIX实用程序,但ex是POSIX标准
POSIX ex 不支持 \r
、\15
、\n
或 \12
要删除回车符:
awk 'BEGIN{RS="^$";ORS="";getline;gsub("\r","");print>ARGV[1]}' file
添加换行:
awk 'BEGIN{RS="^$";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file
$
并保留仅^
,而其他一些则可执行其他操作),当getline
失败时,它们将产生意外结果,它们仅会处理输入的第一行,并且在某些情况下会破坏输入文件。如果修复后要处理所有行,则会在其他行中通过向正在读取的输入文件写入而导致无限循环。请勿执行这些脚本。 - Ed Mortontr
解决方案则需要将输出写入不同的文件。 - PeterM
tr -d '\r' < windows.txt > unix.txt
。该命令的作用是将windows.txt
文件中的所有回车符\r
删除,并将结果输出到名为unix.txt
的新文件中。 - Davoud Taghawi-Nejadsed
的-i
,但仍然使用中间/备份文件。 - nhedawk '{sub(/\r$/,"")}1' windows.txt > unix.tx
,但请注意,tr
会从输入中删除 所有 的\r
,而不仅仅是像 perl、sed 和现在的 awk 脚本那样出现在每行末尾的\r
。 - Ed Mortoncat windows_newlines.txt | tr -d '\r' > unix_newlines.txt
- jocassid