【问题标题】:Unknown option to 's' in a sed scriptsed 脚本中“s”的未知选项
【发布时间】:2014-12-08 14:53:38
【问题描述】:

我正在尝试对 IPv4 地址脚本进行简单替换。

这是我的代码。

#!/bin/sh

sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/192.100.100.100/g/'

每次我打电话都会发生什么:

example.sed example1 > example.output 

我明白了:

sed: -e expression #1, char 75: unknown option to `s'

第 75 个字符是 192.100.100.100 中的 1。

为什么?

【问题讨论】:

标签: shell unix sed scripting


【解决方案1】:

去掉尾部的斜线!

sed -e \
   's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/192.100.100.100/g'

(分成两行试图确保字符串末尾的可见性。)

请注意,seds/// 字符串的开头处的s 开始计数,而不是在sed 单词的开头。结尾的 / 位于该字符串的第 75 个字符处。

完整的脚本也应该添加“所有命令行参数”(又名"$@"):

sed -e \
   's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/192.100.100.100/g' \
   "$@"

如果指定了文件,它将读取文件(并且还接受额外的编辑命令,例如-e 's/.*//'!)或如果未指定参数,则为标准输入。您可以将所有内容放在脚本中的一行;中断是为了提高 Stack Overflow 的清晰度。

【讨论】:

  • 嗯,这很尴尬。谢谢您的帮助。我试过了,在我输入文件命令后,我的 shell 就冻结了。有什么想法吗?
  • 等你输入数据?尝试控制-D;它应该退出 sed 而不是你的 shell。
  • "请注意,sed 从 s 开始计数" 这是有道理的。好的,再次感谢您!
猜你喜欢
  • 2014-09-02
  • 2013-04-28
  • 2016-03-19
  • 2021-02-07
  • 2013-06-06
  • 2012-03-11
  • 1970-01-01
  • 2022-12-28
相关资源
最近更新 更多