【发布时间】:2011-03-01 16:01:33
【问题描述】:
我有一个从 Windows 生成的文件,我必须将其粘贴到 linux 下的脚本中。 我的脚本工作正常,除了在每一行的末尾我得到一个 ^M 字符。
如何使用 bash 删除它?
目前我的脚本是:
#/bin/bash
IFS=$'\n'
for CUSTOMER in `cat exp.csv`
do
echo $CUSTOMER
done
【问题讨论】:
我有一个从 Windows 生成的文件,我必须将其粘贴到 linux 下的脚本中。 我的脚本工作正常,除了在每一行的末尾我得到一个 ^M 字符。
如何使用 bash 删除它?
目前我的脚本是:
#/bin/bash
IFS=$'\n'
for CUSTOMER in `cat exp.csv`
do
echo $CUSTOMER
done
【问题讨论】:
^M 应该是 windows 换行符 \r,因此您只需删除所有 \r 你可以使用 tr 工具来实现这一点,你可以从你的 bash 脚本中调用它,这是来自维基百科文章(我没有验证它):
tr -d '\r' < inputfile > outputfile
因此,从 bash 来看应该是这样的
VAR=`echo -n $CUSTOMER | tr -d '\r'`
【讨论】:
在进一步处理之前,请在exp.csv 上致电dos2unix。
【讨论】:
我经常使用tr 来做这件事。 CR 字符是八进制的 013:
tr -d '\013' < $FILE
所以在你的循环中,那就是
for CUSTOMER in `tr -d '\013' < exp.csv`
【讨论】:
文件上的dos2unix命令
【讨论】:
有几种方法可以从您的文件中删除错误的char M
使用命令dos2unix file_name
在 vi 编辑器中打开文件,转到
命令模式并输入:%s/ctrl+v ctrl+m//g 这将删除所有坏的
你文件中的字符。现在使用:wq 保存并退出
sed -e "s/^M//" filename(exist file name) > newfilename(new name)
sed -e "s/^M//" 文件名(已有文件名) > newfilename(新文件名)
注意:要在 unix 服务器上查找所有 java 文件的错误字符,请点击以下命令
find . -name "*.java*" -type f | xargs grep -l ^M *
同样,您可以对所有类型的文件使用 "*.*" 而不是 "*.java"
【讨论】: