Regex 正则表达式匹配bash变量

Regex 正则表达式匹配bash变量,regex,bash,Regex,Bash,我正在尝试修改bash脚本。当前脚本包含 print "<div class=\"title\">" $1 "</div>" 我想做的是添加一个名为“base”值的图像。我有这样的想法: print "<div class=\"icon\"><imgsrc=\"icons\" $1 ".png\"></div><div class=\"title\">" $1 "</div>" 我知道我的正则表达式不太合适,

我正在尝试修改bash脚本。当前脚本包含

print "<div class=\"title\">" $1 "</div>"
我想做的是添加一个名为“base”值的图像。我有这样的想法:

print "<div class=\"icon\"><imgsrc=\"icons\" $1 ".png\"></div><div class=\"title\">" $1 "</div>"
我知道我的正则表达式不太合适,理想情况下,学徒/师傅应该在他们自己的比赛小组中,而不是平手。我不知道如何匹配
$1
参数。

基于“我不知道如何匹配$1参数”

如果您要求的不是正则表达式是否正确,而是如何对bash变量的内容执行匹配,那么我是否正确理解了您的要求

matched_text=$(echo $yourbashvariablecontainingthetext | sed 's/your_regex/backreference_etc/')
$YourBashVariableContaining文本应该是您的$1

纯shell示例:

a="Historian (Level 1)"
noParens=${a/ \(*/}
lastWord=${noParens/[A-Za-z]* /}

a="Muster Historian (Level 1)"
noParens=${a/ \(*/}
lastWord=${noParens/[A-Za-z]* /}

(这两种情况下的表达式都是相同的,只是为了便于测试而重复而已)。

在bash中使用正则表达式匹配:

for a in 'Apprentice Historian (Level 1)' 'Historian (Level 4)' 'Master Historian (Level 7)' ; do
    set "$a"
    echo " === $1 ==="
    [[ $1 =~ (Apprentice|Master)?' '?(.*)' ('Level' '[0-9]+')' ]] \
        && echo ${BASH_REMATCH[${#BASH_REMATCH[@]}-1]}
done 

棘手的部分是从BASH_重赛中检索正确的成员。Bash不支持非捕获括号,因此Historian的值小于1或2。幸运的是,我们知道这是最后一个链接。

谢谢你的链接,但我并不是在解析[x]html。我实际上是在基于几个关键字创建一个html输出。@JackManey我想OP会要求使用bash对
学徒历史学家(级别1)
类字符串进行正则化。
a="Historian (Level 1)"
noParens=${a/ \(*/}
lastWord=${noParens/[A-Za-z]* /}

a="Muster Historian (Level 1)"
noParens=${a/ \(*/}
lastWord=${noParens/[A-Za-z]* /}
for a in 'Apprentice Historian (Level 1)' 'Historian (Level 4)' 'Master Historian (Level 7)' ; do
    set "$a"
    echo " === $1 ==="
    [[ $1 =~ (Apprentice|Master)?' '?(.*)' ('Level' '[0-9]+')' ]] \
        && echo ${BASH_REMATCH[${#BASH_REMATCH[@]}-1]}
done