我在过去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和here,我相信它可以正常运行。
有人能指出我对macOS和正则表达式的一些文档的方向吗?
答案 0 :(得分:3)
s
的{{1}}命令需要两个参数。您可以使用匹配整行的正则表达式将整行替换为空行(注意最后的sed
正则表达式通配符);
.*
或使用s/^uuid:.*//
命令删除任何匹配的行;
d
前者将离开最后的换行符(虽然一些/^uuid:/d
方言也会让你匹配并替换它),而删除一行也总是删除它的尾随换行符。
尽管有肤浅的相似之处,但这些在语法上是不同的。 sed
命令无条件地应用于每一行(尽管如果正则表达式不匹配,它不会替换任何东西),而s
命令具有地址表达式它只选择某些行(同样,使用正则表达式,但不必匹配整行)。