sed脚本中's'的未知选项

时间:2014-10-13 22:56:21

标签: shell unix sed scripting

我正在尝试简单地替换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。

为什么?

1 个答案:

答案 0 :(得分:4)

删除斜杠!

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的清晰度。