【发布时间】:2011-05-23 17:07:07
【问题描述】:
我正在尝试使用 SED 从日志文件中提取文本。我可以毫不费力地进行搜索和替换:
sed 's/foo/bar/' mylog.txt
但是,我想让搜索不区分大小写。从我用谷歌搜索的内容来看,似乎将i 附加到命令的末尾应该可以工作:
sed 's/foo/bar/i' mylog.txt
但是,这给了我一条错误消息:
sed: 1: "s/foo/bar/i": bad flag in substitute command: 'i'
这里出了什么问题,我该如何解决?
【问题讨论】:
-
您可以尝试更新您的 sed 副本吗?
I是一个 GNU 扩展,您的 sed 副本可能不提供它。 -
EDIT:我通过了 OS X 资格,因为 OP 接受了一个在 OS X 上不起作用的答案。(正如另一个答案所示,sed 在 OS X不支持不区分大小写的匹配,这与 Apple 文档相反。)
-
@danorton:谢谢你;如果您从以下我的回答中得出 Apple 文档承诺实现未提供的某些东西的感觉:
man sed与实现一致 - 没有提及(并且在实践中不支持)不区分大小写的匹配;如果您发现有其他声明的文件,请告知我们。 -
@mklement0,是的,对不起,我的立场是正确的。 Apple 文档没有对 sed 的不区分大小写匹配做出任何声明。
-
FWIW,BSD 版本随 OS X 一起提供的工具的 GNU 版本可从各种包管理器中获得。我通过Homebrew 安装了全套文本实用程序,并带有
g前缀,因此当我需要库存版本中没有的功能时,我可以使用gsed或gdate。
标签: macos replace sed case-insensitive