使用sed删除匹配模式不适用于macOS Catalina

时间:2019-10-23 22:22:33

标签: bash macos sed

我正在拼命寻找一个看似非常简单的问题的答案:我想从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(安装了自制软件后)...,但结果与上面严格相同。

我想我缺少明显的东西,但是我真的看不到!

1 个答案:

答案 0 :(得分:0)

让我们尝试使用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

祝你好运。