最后,我只想从中提取以下文件Removed '2022-01-30_01-00-05'
。
Removing '2022-01-30_01-00-05'...
0.46% complete (00:03:45 remaining)^M 5.49% complete (00:00:17 remaining)^M 24.90% complete (00:00:06 remaining)^M 60.56% complete (00:00:01 remaining)^M 82.12% complete (00:00:00 remaining)^M 82.39% complete (00:00:01 remaining)^M 84.24% complete (00:00:01 remaining)^M 86.48% complete (00:00:01 remaining)^M 88.58% complete (00:00:01 remaining)^M 89.66% complete (00:00:01 remaining)^M101.08% complete (00:00:00 remaining)^M104.62% complete (00:00:00 remaining)^M ^MRemoved '2022-01-30_01-00-05'
我试过dos2unix
了,但没有用。
我在下面尝试了这些变体,但是当我less output
要么不删除^M
字符时,要么捕获整行:
tr -d $'\r' < /file | grep "Removed" > output
tr -d '^M' < /file | grep "Removed" > output
tr -d ^M < /file | grep "Removed" > output
sed 's/\r//g' < /file | grep "Removed" > output
该
grep
命令将打印整个匹配行,并且由于 *nix 中的行由\n
and not定义,因此\r
您描述的是正常行为。换句话说,您的第一个和最后一个命令( thetr -d '\r'
和 thesed 's/\r//g'
)都按预期工作,只是 grep 正在做它应该做的事情并打印整行。要只打印一行的一部分,您需要 GNU
grep
及其-o
选项。例如:或者,将
\r
(the^M
) 更改为换行符而不是删除它们:或者
dos2unix
\r
从行尾 ( ) 之前删除 control-Ms (\n
) - 这不是你所拥有的,你有 control-Ms而不是行尾。因此dos2unix
不帮助你。将 GNU awk 用于多字符 RS 并使用任何
\r
s 和/或\n
s 序列作为记录分隔符:输出
您的输入文件有 Mac 换行符。您可以将它们转换为 Unix 换行符
或者
要找出您的文件有哪种类型的换行符,您可以使用以下命令: