MacOS 终端查找和正则表达式问题

MacOS Terminal find and regex issue

在过去的 24 小时里,我花了相当多的时间来尝试让这个脚本工作。我在这里遇到了几个线程,这些线程指向正则表达式命令根本无法在终端中的 Mac 上工作。

find . -name '*.yml' -print0 | xargs -0 sed -i '' -e 's/^uuid.*\n/g'

此脚本应该遍历当前目录中的所有 yml 文件,并删除以 uuid.

开头的行

根本行不通。

我可以让它工作:

find . -name '*.yml' -print0 | xargs -0 sed -i '' -e 's/^uuid://g

但它只是从行中删除 uuid 部分,当我需要整行消失和空格时。

我已经测试了我的正则表达式 here and here,我相信它可以正常工作。

任何人都可以指出一些 macOS 和正则表达式文档的方向吗?

seds 命令需要两个参数。您可以使用匹配整行的正则表达式将整行替换为空行(注意末尾的 .* 正则表达式通配符);

s/^uuid:.*//

或使用d命令删除任何匹配的行;

/^uuid:/d

前者会留下最后的换行符(虽然有些 sed 方言也可以让你匹配和替换它)而删除一行总是也会删除它的尾随换行符。

尽管表面上有相似之处,但它们在语法上是不同的。 s 命令无条件地应用于每一行(尽管如果正则表达式不匹配,它不会替换任何内容)而 d 命令有一个 地址表达式 只选择某些行(同样,使用正则表达式,但是不必匹配整行)。