我正在尝试简单地替换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。
为什么?
答案 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'
(两行的分割试图确保字符串结尾的可见性。)
请注意,sed
从s
字符串开头的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的清晰度。