命令行 - 將兩個連續的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$





相关文章