【问题标题】:Deleting matching pattern with sed doesn't work with mac os Catalina使用 sed 删除匹配模式不适用于 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

标签: bash macos sed


【解决方案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

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多