Unix文件处理删除垃圾字符

时间:2016-04-22 18:21:08

标签: regex perl unix awk sed

输入文件:

abc
def^M
ghi
jkl
mno^M
pqr^M

期望的输出:

abc def
ghi jkl mno
pqr

我试过了:

sed 's/^[\^M]$/ /g' file.txt > output.txt

即。所有行都应与空格隔离,直到^ M [ctrl -m]字符。

2 个答案:

答案 0 :(得分:2)

^M通常不是实际字符^M^表示特殊字符,M表示它是第13个ASCII字符(M是第13个字母)。 ^M表示回车符。查看ASCII table可以提供帮助。这种不可打印的ASCII字符称为“控制字符”。

这通常意味着该文件有两个字符的Windows样式换行符,ASCII 13和ASCII 10.大多数语言将其表示为\r\n

要替换^M,您可以使用\r\015(基数为8的第15个ASCII字符 ,十进制为13)。

答案 1 :(得分:2)

使用gnu-awk即可:

awk -v RS='\r\n*' '{gsub(/\n/, " ")} 1' file

abc def
ghi jkl mno
pqr