这是我要复制的内容:
$ cat << EOF | { var=$(grep 'foo=');\
if (( $? == 0 )); then echo "$var"\
| sed -E 's/foo=(.+)/\1/'; else exit 1; fi; }
foo
foo=bar
EOF
酒吧
sed
独占使用:
$ cat << EOF | sed -nE '/foo=/p s/foo=(.+)/\1/'
foo
foo=bar
EOF
sed:-e 表达式 #1,字符 9:命令后的额外字符
错误的原因是什么,如何解决?
你正在尝试做
您的命令
p
在初始地址(正则表达式foo=
)之后有一个,这将其变成了一个完整的sed
编辑命令(带有抱怨的s/...
尾随垃圾),而不是命令的地址。sed
s
在上面的命令中,
/foo=/
是后续s
命令的地址。该s
命令将应用于与正则表达式匹配的每一行foo=
。使其避免在每个循环后打印编辑缓冲区的-n
选项sed
,这就是我们使用该p
标志和s
命令来打印修改的行的原因。但是,您也可以将其写为
它删除了
foo=
每一行上的位,该foo=
位后面有一个位。或者,更短的,通过让
s
命令重用用作地址的正则表达式(然后显然假设我们不需要在 之后有任何东西foo=
),或者,甚至更短,通过认识到该
s
命令不会更改与正则表达式不匹配的行,或者,没有
-n
,通过删除所有不感兴趣的行并仅修改感兴趣的行并依赖于循环结束时的默认输出,