sed 脚本中“s”的未知选项

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。

为什么?

Jon*_*ler 5

删除尾部斜线!

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/.*//'!)或标准输入,如果没有指定参数。您可以将所有内容放在脚本中的一行中;中断是为了提高堆栈溢出的清晰度。

  • 它在等你输入数据?试试控制-D;它应该退出`sed`而不是你的shell。 (2认同)