JJD*_*JJD 85 regex sed substitution
我运行几个替换命令作为maven的colorize脚本的核心.其中的sed命令,使用正则表达式,在shell工作发现这里讨论.可以在此处找到当前(不工作)的实现.
当我将该命令的一个变体包含到脚本中时,会发生不同的行为:
变式1:
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
Run Code Online (Sandbox Code Playgroud)
适应脚本:
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
Run Code Online (Sandbox Code Playgroud)
错误: shell输出的信息与我输入的信息相同$ sed.奇怪!?
变式2:
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
Run Code Online (Sandbox Code Playgroud)
适应脚本:
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
Run Code Online (Sandbox Code Playgroud)
错误:
sed:-e表达式#7,char 59:`s'命令的RHS上的引用\ 1无效
e18*_*18r 47
对于未转义的括号,此错误很常见.逃离它们并再试一次.
例如:
/^$/b
:loop
$!{
N
/\n$/!b loop
}
s/\n(.)/\1/g
Run Code Online (Sandbox Code Playgroud)
应该在每个括号前使用反斜杠进行转义:
/^$/b
:loop
$!{
N
/\n$/!b loop
}
s/\n\(.\)/\1/g
Run Code Online (Sandbox Code Playgroud)
Den*_*rdy 38
您是否需要实际捕获它才能工作?即对于变体2:
-r -e "s/WARNING: (\([a-zA-Z0-9./\\ :-]\+\))/${warn}WARNING: \1${c_end}/g" \
Run Code Online (Sandbox Code Playgroud)
(注:未经测试)
如果没有-r参数,则返回引用(如\ 1)将不起作用.
你需要逃避/之后.
sed -e "s/\([a-zA-Z0-9.\/\\ :-]\+\)/\1/g"
Run Code Online (Sandbox Code Playgroud)
或者,如果您不想担心逃逸,请使用 |
sed -e "s|\([a-zA-Z0-9./\\ :-]\+\)|\1|g"
Run Code Online (Sandbox Code Playgroud)
编辑:
sed -e "s|WARNING: \([a-zA-Z0-9.-/\\ :]+\)|${warn}WARNING: \1${c_end}|g"
Run Code Online (Sandbox Code Playgroud)