我运行一些替换命令作为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
解决问题。