使用 sed 删除匹配模式不适用于 mac os Catalina
Posted
技术标签:
【中文标题】使用 sed 删除匹配模式不适用于 mac os Catalina【英文标题】:Deleting matching pattern with sed doesn't work with mac os Catalina 【发布时间】: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
像这样使用tr
tr -d '\r' <inputfile >outputfile
【参考方案1】:
让我们尝试使用 grep 的另一种方式。
我已经创建了如下的 test.txt 文件
bash-3.2$ cat test.txt
AA
BB
CC
MA
MB
BM
CM
MU
MZ
SH
JH
HJ
12M
M45
M*&
M#$
12
用 grep
bash-3.2$ grep -v ^M test.txt > tmp.txt; mv tmp.txt test.txt
使用“^M”执行 grep,即所有以“M”开头的行并使用反向选项“-v”选择其余行。将 grep 的输出移动到 tmp.txt 文件中,然后将该文件替换为原始文件。
bash-3.2$ cat test.txt
AA
BB
CC
BM
CM
SH
JH
HJ
12M
12
祝你好运。
【讨论】:
以上是关于使用 sed 删除匹配模式不适用于 mac os Catalina的主要内容,如果未能解决你的问题,请参考以下文章
gfortran 不适用于 Mac OS X 10.9(小牛)