我正在尝试修改bash脚本。脚本当前包含
print "<div class=\"title\">" $1 "</div>"其中$1可能如下所示:
Apprentice Historian (Level 1)
Historian (Level 4)
Master Historian (Level 7)我想要做的是添加一个名为"base“值的图像。我的脑海中有这样的东西:
print "<div class=\"icon\"><imgsrc=\"icons\" $1 ".png\"></div><div class=\"title\">" $1 "</div>"然而,在这种情况下,我希望$1只返回Historian。我在想,我可以使用正则表达式在$1上匹配和,并且只保留我需要的部分。
(Apprentice|Master)?\s(.*)\s(\(Level \d\)) 我知道我的正则表达式并不在那里,理想情况下,学徒/大师应该在他们自己的比赛小组中,而不是绑在基地上。我不知道如何匹配$1参数。
发布于 2012-02-15 19:51:10
在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_REMATCH检索正确的成员。Bash不支持非捕获括号,因此Historian不是小于1就是小于2。幸运的是,我们知道它是最后一个。
发布于 2012-02-15 18:00:12
示例纯shell:
a="Historian (Level 1)"
noParens=${a/ \(*/}
lastWord=${noParens/[A-Za-z]* /}
a="Muster Historian (Level 1)"
noParens=${a/ \(*/}
lastWord=${noParens/[A-Za-z]* /}(在这两种情况下都是相同的表达式,只是为了便于测试而重复)。
发布于 2012-02-15 15:30:57
基于“我不知道如何匹配$1参数”。
如果您询问的不是您的正则表达式是否正确,而是如何根据bash变量的内容执行匹配,那么我是否正确理解了您的问题?
matched_text=$(echo $yourbashvariablecontainingthetext | sed 's/your_regex/backreference_etc/')$yourbashvariablecontainingthetext应该是你的$1
https://stackoverflow.com/questions/9289239
复制相似问题