命令行 - 将两个连续的CRLF替换为一个

分享于 

2分钟阅读

ubuntu

  繁體

问题:

cat -e file.txt给出:


{"yellow":"mango"}^M$


^M$


{"yellow":"banana"}^M$


^M$


{"yellow":"blabla"}^M$


^M$



我只想:


{""yellow":"mango"}^M$


{"yellow":"banana"}^M$


{"yellow":"blabla"}^M$



我尝试了:

find . -type f -name "*.txt" -print0 | xargs -0 sed -i "s/^M$^M$/^M$/g"

head -n 3 file.txt | od -bc


0000000 173 042 171 145 154 154 157 167 042 072 042 155 141 156 147 157


 { " y e l l o w " : " m a n g o


0000020 042 175 015 012 015 012 173 042 142 141 142 141 142 042 072 042


 " } r n r n { " b a b a b " : "


0000040 155 141 156 147 157 042 175 015 012


 m a n g o " } r n


0000051



awk 1 RS='rn' ORS= < file.txt


答案1:

你可以使用sed -z's/rnrn/rn/g'

通常sed一次只能在一行上工作,通过使用-z选项,0字节分隔,因此整个文件被视为一行,可以替换新行。


答案2:

你还可以删除仅包含回车符的行:

 
sed'/^r$/d'file



例如:


$ cat -e file


AB^M$


^M$


CB^M$


^M$


$ sed '/^r$/d' file|cat -e


AB^M$


CB^M$





COM  rep  COMM  Comma  CONS  命令行  
相关文章