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 和正则表达式文档的方向吗?
sed
的 s
命令需要两个参数。您可以使用匹配整行的正则表达式将整行替换为空行(注意末尾的 .*
正则表达式通配符);
s/^uuid:.*//
或使用d
命令删除任何匹配的行;
/^uuid:/d
前者会留下最后的换行符(虽然有些 sed
方言也可以让你匹配和替换它)而删除一行总是也会删除它的尾随换行符。
尽管表面上有相似之处,但它们在语法上是不同的。 s
命令无条件地应用于每一行(尽管如果正则表达式不匹配,它不会替换任何内容)而 d
命令有一个 地址表达式 只选择某些行(同样,使用正则表达式,但是不必匹配整行)。
在过去的 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 和正则表达式文档的方向吗?
sed
的 s
命令需要两个参数。您可以使用匹配整行的正则表达式将整行替换为空行(注意末尾的 .*
正则表达式通配符);
s/^uuid:.*//
或使用d
命令删除任何匹配的行;
/^uuid:/d
前者会留下最后的换行符(虽然有些 sed
方言也可以让你匹配和替换它)而删除一行总是也会删除它的尾随换行符。
尽管表面上有相似之处,但它们在语法上是不同的。 s
命令无条件地应用于每一行(尽管如果正则表达式不匹配,它不会替换任何内容)而 d
命令有一个 地址表达式 只选择某些行(同样,使用正则表达式,但是不必匹配整行)。