use*_*413 5 command-line text-processing
cat -e file.txt 给出:
{"yellow":"mango"}^M$
^M$
{"yellow":"banana"}^M$
^M$
{"yellow":"blabla"}^M$
^M$
Run Code Online (Sandbox Code Playgroud)
我只想拥有:
{""yellow":"mango"}^M$
{"yellow":"banana"}^M$
{"yellow":"blabla"}^M$
Run Code Online (Sandbox Code Playgroud)
适用于文件夹中带有 txt 扩展名的所有文件。所以我试过:
find . -type f -name "*.txt" -print0 | xargs -0 sed -i "s/^M$^M$/^M$/g"
Run Code Online (Sandbox Code Playgroud)
无济于事。有没有人有更好的主意?
head -n 3 file.txt | od -bc
Run Code Online (Sandbox Code Playgroud)
产量:
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
Run Code Online (Sandbox Code Playgroud)
这个:
awk 1 RS='\r\n' ORS= < file.txt
Run Code Online (Sandbox Code Playgroud)
完全删除新行(所以这不好:我想在每行上保留两个连续的行之一,但它做了一些事情)。
小智 13
您可以使用sed -z 's/\r\n\r\n/\r\n/g'.
通常一次sed只能在一行上工作。通过使用该-z选项,sed将处理由0字节分隔的行,这些行通常不存在于文本文件中,因此整个文件将被视为一行并且可以替换换行符。
(在stackoverflow上找到并添加了解释)
Qua*_*odo 12
您还可以删除仅包含回车符的行。
使用 GNU Sed:
sed '/^\r$/d' file
Run Code Online (Sandbox Code Playgroud)
对于最小但符合 POSIX 的机器(这里我们需要用 Printf 生成回车):
sed "/^$(printf "\r")$/d" file
Run Code Online (Sandbox Code Playgroud)
^匹配行首和最后一个$,即行尾 ( \n)。
例如:
$ cat -e file
AB^M$
^M$
CB^M$
^M$
$ sed '/^\r$/d' file|cat -e
AB^M$
CB^M$
Run Code Online (Sandbox Code Playgroud)