Bash变量搜索和替换而不是sed

时间:2017-03-11 20:35:47

标签: regex bash parsing variables replace

See Code Review

See Github Project

我需要逐行解析+word+的实例(将+word+替换为空白)。我目前正在使用以下(工作)sed正则表达式:

newLine=$(echo "$line" | sed "s/+[a-Z]\++//g")

这违反了" SC2001"根据" ShellCheck"验证;

SC2001: See if you can use ${variable//search/replace} instead.

我尝试了多次变化而没有成功(字符串" + word +"保留在输出中):

newLine=$(line//+[a-Z]+/)
newLine=$(line/+[a-Z]+//)
newLine=$(line/+[a-Z]\++/)
newLine=${line//+[a-Z]+/}
and more..

我听说在某些情况下sed是必要的,但是如果可能的话,我想使用Bash内置的查找和替换。

1 个答案:

答案 0 :(得分:4)

参数扩展中的替换不使用正则表达式,而是patterns。要接近正则表达式,可以启用扩展模式:

shopt -s extglob
new_line=${line//++([a-Z])+}