Bash 从dos2unix转换时添加的隐藏字符
以逗号分隔的.csv格式输入文件:Bash 从dos2unix转换时添加的隐藏字符,bash,shell,unix,dos2unix,Bash,Shell,Unix,Dos2unix,以逗号分隔的.csv格式输入文件: 25 Mbps^M 25 Mbps^M 25 Mbps^M 0 Mbps ^M 0 Mbps ^M 0 Mbps ^M 0 Mbps ^M ash Back ^M ash Back ^M ash Back ^M 从dos2unix转换时, ^M之前的空格将转换为隐藏字符 需要去掉空格,以便从dos2unix转换时不存在隐藏字符 尝试使用sed、tr,但没有任何效果 for filename in *.csv do echo "C
25 Mbps^M
25 Mbps^M
25 Mbps^M
0 Mbps ^M
0 Mbps ^M
0 Mbps ^M
0 Mbps ^M
ash Back ^M
ash Back ^M
ash Back ^M
从dos2unix转换时,
^M之前的空格将转换为隐藏字符
需要去掉空格,以便从dos2unix转换时不存在隐藏字符
尝试使用sed、tr,但没有任何效果
for filename in *.csv
do
echo "Converting $filename to UNIX format!!!!!\n \n"
tr -d '\r' $filename > test_2
#Converting file into Unix format and moving to input dir
cp test_2 $filename
dos2unix $filename > /input/$filename
done
从dos2unix转换后,文件不应包含任何隐藏字符。如上所述,从数据中删除;你所说的“隐藏字符”就是通常所说的“空格”(通常通过按下键盘底部的大条来实现)
您可以通过GNU sed实现您想要的:
sed的//[:space:]*$//g'-i*.csv
:空格字符:在“C”区域设置中,这是制表符、换行符、垂直制表符、换行符、回车符和空格。[][[:space:]
:指定要在位编辑的文件。[]-i
for filename in *.csv
do
sed 's/[[:space:]]*$//g' "$filename" > "${filename}.out"
mv -f "${filename}.out" "${filename}"
done
dos2unix
删除\r
s。隐藏字符是什么意思?您是否使用二进制查看器(如bvi
或od
)检查了这些字符?我很好奇您到底为什么要删除空格。如果值实际上是空格分隔的,那么空格将引入空列,这对于以后的解析可能很重要。如果没有,则空格与大多数文本处理工具无关。此处没有逗号,因此这确实不能是CSV格式。你能展示一个十六进制转储你得到什么(只是一两行)和你想得到什么?