【问题标题】:Does Solaris 5.10 support sed case-insensitive matching?Solaris 5.10 是否支持 sed 不区分大小写的匹配?
【发布时间】:2012-09-23 14:52:58
【问题描述】:

当我尝试使用模式s/find-word/replace-word/Ig 末尾的 I 选项执行不区分大小写的 S&R 时,我收到命令出现乱码的错误。如果我在没有 I 的情况下运行它,则完全相同,即s/find-word/replace-word/g。我使用的是 Solaris 5.10,会不会是我们的 sed 太旧了,不支持 I?

谢谢

【问题讨论】:

  • 编辑: 不是重复的,只是实际问题的标题很差,所以我相应地更改了标题。最佳答案似乎正确回答了这个问题,但 OP 似乎已经放弃了这个问题。

标签: unix sed


【解决方案1】:

我建议使用小写的 i: s/from/to/gi


编辑:好的,我和我的 smartassery...根据http://www.unix.com/shell-programming-scripting/202109-sed-i-not-available-solaris-5-10-a.html 和许多其他链接,solaris 系统上的 sed 工具似乎不支持 -i 选项...然后最好的解决方案是要么使用busybox,为你的系统重建GNU sed,要么使用perl脚本来完成这项工作。

【讨论】:

  • 我使用大写字母 I 是因为我发现的一个例子是这样指示的。也尝试过小写但无济于事
【解决方案2】:

如果您的sed 版本不支持ignorecase 标志,您可以使用tr 预小写所有输入:

<infile tr 'A-Z' 'a-z' | sed ...

【讨论】:

  • sed、awk 和 tr 是编写可移植脚本时在 solaris 上最难处理的事情; tr 在这种情况下不一定有帮助(在评论中格式化有点困难,但我会尝试):$ type -ap tr 在我的 solaris 5.10 上产生:(/bin/tr /usr/bin/tr /usr/ucb/tr /usr/xpg4/bin/tr /usr/xpg6/bin/tr),所以要小心:$ for tr in $( type -ap tr ); do echo "$( echo AaBbCc | $tr 'A-Z' 'a-z' ) == $tr ..."; done 产生: aaBbCc == /bin/tr ... aaBbCc == /usr/bin/tr ... aabbcc == /usr/ucb/tr ... AaBbCc == /usr/xpg4/bin/tr ... AaBbCc == /usr/xpg6/bin/tr ...
  • 仅供参考,只要不使用/usr/ucb/tr,这适用于其他trtr '[:upper:]' '[:lower:]'。不幸的是,对于可移植脚本(即使跨不同的 solaris 框,使用不同的PATH),如果您实际上需要使用tr,则需要测试正在使用哪个tr 的脚本。 (这几乎不值得。)
猜你喜欢
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-24
相关资源
最近更新 更多