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

时间:2018-01-17 12:07:23

标签: regex macos replace find xargs

我在过去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部分,当我需要整行和空白时。

我测试了我的正则表达式herehere,我相信它可以正常运行。

有人能指出我对macOS和正则表达式的一些文档的方向吗?

1 个答案:

答案 0 :(得分:3)

s的{​​{1}}命令需要两个参数。您可以使用匹配整行的正则表达式将整行替换为空行(注意最后的sed正则表达式通配符);

.*

或使用s/^uuid:.*// 命令删除任何匹配的行;

d

前者将离开最后的换行符(虽然一些/^uuid:/d 方言也会让你匹配并替换它),而删除一行也总是删除它的尾随换行符。

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