如何以编程方式(不使用vi)将DOS/Windows换行符转换为Unix换行符?
dos2unix和unix2dos命令在某些系统上不可用。 如何使用sed、awk和tr等命令模拟它们?
如何以编程方式(不使用vi)将DOS/Windows换行符转换为Unix换行符?
dos2unix和unix2dos命令在某些系统上不可用。 如何使用sed、awk和tr等命令模拟它们?
当前回答
对于Mac OS X,如果您安装了Homebrew (http://brew.sh/):)
brew install dos2unix
for csv in *.csv; do dos2unix -c mac ${csv}; done;
确保您已经复制了文件,因为这个命令将在适当的位置修改文件。 -c mac选项使开关与OS X兼容。
其他回答
如果您没有访问dos2unix的权限,但是可以阅读这个页面,那么您可以从这里复制/粘贴dos2unix.py。
#!/usr/bin/env python
"""\
convert dos linefeeds (crlf) to unix (lf)
usage: dos2unix.py <input> <output>
"""
import sys
if len(sys.argv[1:]) != 2:
sys.exit(__doc__)
content = ''
outsize = 0
with open(sys.argv[1], 'rb') as infile:
content = infile.read()
with open(sys.argv[2], 'wb') as output:
for line in content.splitlines():
outsize += len(line) + 1
output.write(line + '\n')
print("Done. Saved %s bytes." % (len(content)-outsize))
(超级用户交叉发布。)
你可以使用AWK。将记录分隔符(RS)设置为匹配所有可能的换行符的正则表达式。并将输出记录分隔符(ORS)设置为unix样式的换行符。
awk 'BEGIN{RS="\r|\n|\r\n|\n\r";ORS="\n"}{print}' windows_or_macos.txt > unix.txt
你可以通过option -c {command}以编程方式使用Vim:
DOS到Unix:
vim file.txt -c "set ff=unix" -c ":wq"
Unix到DOS:
vim file.txt -c "set ff=dos" -c ":wq"
“set ff=unix/dos”表示将文件的fileformat (ff)更改为unix/dos的行尾格式。
":wq"表示将文件写入磁盘并退出编辑器(允许在循环中使用该命令)。
蒂姆托维迪!
perl -pe 's/\r\n/\n/; s/([^\n])\z/$1\n/ if eof' PCfile.txt
根据戈登·戴维森的回答。
人们必须考虑到……的可能性。
使用AWK你可以做到:
awk '{ sub("\r$", ""); print }' dos.txt > unix.txt
使用Perl你可以做到:
perl -pe 's/\r$//' < dos.txt > unix.txt