![grep 查找包含 ^M 的文件 当 ^m dos2unix 和 sed 或“grep -r $'\r' *”不起作用](https://linux22.com/image/1371024/grep%20%E6%9F%A5%E6%89%BE%E5%8C%85%E5%90%AB%20%5EM%20%E7%9A%84%E6%96%87%E4%BB%B6%20%E5%BD%93%20%5Em%20dos2unix%20%E5%92%8C%20sed%20%E6%88%96%E2%80%9Cgrep%20-r%20%24'%5Cr'%20*%E2%80%9D%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我使用 Cygwin 并使用 Perl 脚本创建了一个 txt 文件。
添加了 ^M(Windows 回车符),但我不知道如何添加。
当正常方法(^m dos2unix 和 sed 或“grep -r $'\r' *”)不起作用时,如何找到 ^M?
当使用较少的 file01 时,我可以看到 ^M,但无法将其与任何东西匹配(无论是 \r 还是 ^V^M)。
当使用 Col (参见 man col) 时,我摆脱了它和其他一些东西(我得到了一个非常非常奇怪的输出)
正常输出:
JAN131005 GO:0009055 // GO:0020037 // GO:0003723 // GO:0006468 // GO:0016023 // GO:0003676 // GO:0003964 // GO:0005515 // GO:0004672 // GO:0000166 // GO:0004497 // GO:0006278 // GO:0009055 // GO:0020037 // GO:0003723 // GO:0006468 // GO:0016023 // GO:0003676 // GO:0003964 // GO:0005515 // GO:0004672 // GO:0000166 // GO:0004497 // GO:0006278 ^M // GO:0009055 // GO:0020037 // GO:0003723 // GO:0006468 // GO:0016023 // GO:0003676 // GO:0003964 // GO:0005515 // GO:0004672 // GO:0000166 // GO:0004497 // GO:0006278 ^M // GO:0003964 // GO:0003723 // GO:0006278 // GO:0005488 // GO:0003676 ^M // GO:0005622 // GO:0000166 // GO:0005886 // GO:0006950 // GO:0009628 // GO:0009719 // GO:0005515 // GO:0006950 // GO:0005515 // GO:0006950 // GO:0003674 // GO:0008150 // GO:0003676 ^M // GO:0003676 ^M // GO:0003964 // GO:0003723 // GO:0006278 // GO:0005488 // GO:0003676
在“col <file01>test01”之后,less test01 给出:
J//1GO:0003964//OGO:0003723///OGO:0006278///OGO:0005488///OGO:0003676///OGO:0009719///OGO:0005515///OGO:0006950///OGO:0005515///OGO:0006950///OGO:0003674///OGO:0008150///OGO:0003676// GO:0009055// GO:0020037// GO:0003723// GO:0006468// GO:0016023// GO:0003676// GO:0003964//前往:0005515 // 前往:0004672 // 前往:0000166 // 前往:0004497 // 前往:0006278
正如您所见,我已经消除了问题,并用另外 2 个替换了它...有人可以解释一下这里删除了什么 col 以及如何删除,以及我应该如何删除它才能删除 ^M?
答案1
问题是 \r 不起作用,请改用 \015:
tr -d "\015" <输入文件>输出文件
由于某种原因,当 \r 等不起作用时,\015 (八进制文字)起作用。