从bash脚本中的字符串中提取模式

时间:2017-01-04 18:18:41

标签: linux string bash shell

bash有点新鲜。

我已经尝试过参数扩展,grep,sed和echo来解决这个问题,但是不能完全解决这个问题。

我试图在bash脚本中从$ PWD中提取某个模式。

让我们说可能有各种各样的完整路径:

/home/files/tmp8
/home/tmp28/essential
/home/tmp2/essential/log
/home/files/tmp10/executables
/tmp8/files/whatever/etc

在每个实例中,我想提取包含" tmp"的任何字符串。然后是1个或更多整数。

因此,在处理$ PWD的每个实例中,它将返回" tmp8"," tmp28"," tmp2"等。

关于功能/操作员如何解决这个问题的解释也将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以在bash中使用正则表达式从任何路径字符串中提取模式。请参阅以下示例:

if [[ "$PWD" =~ ^.*(tmp[0-9]+).*$ ]]
then
    printf "match: ${BASH_REMATCH[1]}\n"
else
    printf "no match: $PWD\n"
fi

正则表达式在圆括号中定义一个组。 如果表达式匹配匹配组(tmp后面至少有一个数字),它将由Bash存储在数组BASH_REMATCH中。

答案 1 :(得分:1)

使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="checkbox" checked id="chkDocId1" myattribute="myval1"/> <input type="checkbox" id="chkDocId2" myattribute="myval43"/> <input type="checkbox" checked id="chkDocId3" myattribute="myval21"/>仅使用正则表达式grep -o显示匹配的文字,即文字tmp[0-9]*后跟0或更多数字:

tmp