Mip*_*ips 0 unix shell scripting sed
我正在尝试对 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/'
Run Code Online (Sandbox Code Playgroud)
每次我打电话时都会发生什么:
example.sed example1 > example.output
Run Code Online (Sandbox Code Playgroud)
我得到:
sed: -e expression #1, char 75: unknown option to `s'
Run Code Online (Sandbox Code Playgroud)
其中第 75 个字符是 192.100.100.100 中的 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'
Run Code Online (Sandbox Code Playgroud)
(分成两行试图确保字符串末尾的可见性。)
需要注意的是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' \
"$@"
Run Code Online (Sandbox Code Playgroud)
如果指定了文件,这将读取文件(并且还接受额外的编辑命令,例如-e 's/.*//'!)或标准输入,如果没有指定参数。您可以将所有内容放在脚本中的一行中;中断是为了提高堆栈溢出的清晰度。