我运行一些替换命令作为maven的colorize脚本的核心。其中的sed命令,使用正则表达式,在shell工作发现这里讨论。当前(无效)的实现可以在此处找到。
当我在脚本中包含命令的一种变体时,会发生不同的行为:
变体1:
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
适应脚本:
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
错误: shell输出的信息与我键入相同$ sed。奇怪!?
形式2:
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
适应脚本:
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
错误:
sed:-e表达式#7,字符59:`s命令的RHS上无效的引用\ 1
还应注意,单引号
—
not2qubit
'和双引号"的处理方式略有不同,尤其是在解释时$vars。例如:sudo sh -c "sed -r -i 's/(^.+_supplicant.conf)/\1${MTXT}/' /etc/network/interfaces"有效,但是:sudo sh -c 'sed -r -i "s/(^.+_supplicant.conf)/\1${MTXT}/" /etc/network/interfaces'无效。
-i(原位编辑选项)与组合在一起(-re导致-ire(-i使用该re片段作为其SUFFIX参数,因此未启用扩展的regex模式));进行更改以-i -re解决问题。