首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式匹配bash变量

正则表达式匹配bash变量
EN

Stack Overflow用户
提问于 2012-02-15 15:05:45
回答 3查看 19.2K关注 0票数 5

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

代码语言:javascript
复制
print "<div class=\"title\">" $1 "</div>"

其中$1可能如下所示:

代码语言:javascript
复制
Apprentice Historian (Level 1)
Historian (Level 4)
Master Historian (Level 7)

我想要做的是添加一个名为"base“值的图像。我的脑海中有这样的东西:

代码语言:javascript
复制
print "<div class=\"icon\"><imgsrc=\"icons\" $1 ".png\"></div><div class=\"title\">" $1 "</div>"

然而,在这种情况下,我希望$1只返回Historian。我在想,我可以使用正则表达式在$1上匹配和,并且只保留我需要的部分。

代码语言:javascript
复制
(Apprentice|Master)?\s(.*)\s(\(Level \d\)) 

我知道我的正则表达式并不在那里,理想情况下,学徒/大师应该在他们自己的比赛小组中,而不是绑在基地上。我不知道如何匹配$1参数。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-15 19:51:10

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

代码语言:javascript
复制
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。幸运的是,我们知道它是最后一个。

票数 10
EN

Stack Overflow用户

发布于 2012-02-15 18:00:12

示例纯shell:

代码语言:javascript
复制
a="Historian (Level 1)"
noParens=${a/ \(*/}
lastWord=${noParens/[A-Za-z]* /}

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

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

票数 5
EN

Stack Overflow用户

发布于 2012-02-15 15:30:57

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

如果您询问的不是您的正则表达式是否正确,而是如何根据bash变量的内容执行匹配,那么我是否正确理解了您的问题?

代码语言:javascript
复制
matched_text=$(echo $yourbashvariablecontainingthetext | sed 's/your_regex/backreference_etc/')

$yourbashvariablecontainingthetext应该是你的$1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9289239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档