【发布时间】:2020-02-20 05:21:28
【问题描述】:
我正在拼命寻找一个看似非常简单的问题的答案:我想从一个 txt 文件中删除所有匹配的模式。 我在 Mac OS Catalina 下使用以下命令:
sed 's/^M//' $filename > text_clean.txt
$filename 包含我正在执行操作的 txt 文件的名称。
"^M" 模式代表 Mac OS 下的换行符:我已经测试了几乎所有我能找到的东西,这是唯一可行的解决方案。
所以,发生的事情是以下命令完成了这项工作:
sed 's/^M/AAAAA/' $filename > text_clean.txt
但只是部分因为它替换为“AAAAA”字符,这不是我想要的。
执行 sed 's/^M//' $filename > text_clean.txt 时,结果文件完全没有变化,所以我猜测要么命令没有执行(但为什么?),或者我必须插入一个特定的“空”字符,因为我使用的是 Mac OS shell(但是哪个?)。
我也用 gsed 进行了测试(在安装自制软件之后)......但结果与上述完全相同。
我想我遗漏了一些明显的东西,但我真的不明白是什么!
【问题讨论】:
-
sed 's/\r//g' $filename > text_clean.txt -
@WiktorStribiżew sed 中的 C 转义是一个 GNU 扩展,可以与上述
gsed一起使用(假设它代表 GNU sed)。 -
那
sed 's/'$'\r''//g' "$filename" > text_clean.txt怎么样 -
:)也许sed没有公证 在Catalina 上运行,Gatekeeper 阻止它运行:)参见例如Not LibreOffice too? Beloved open-source suite latest to fall victim to the curse of Catalina -
像这样使用
trtr -d '\r' <inputfile >outputfile