我有一个我需要解析的文件路径,但是,我对Shell是新的,并且不确定适当或常规的过程是什么。假设我有一个代表文件路径的变量:
EX=/home/directory/this/might/have/numbers23/12349_2348/more/paths
我需要获得12349_2348,然后将成为我已经知道如何做的其他一些事情的文件名。我该如何提取?我知道使用Regex做到这一点的基本方法,但是,它可以与/([0-9]) d /匹配,但是,我通过使用Regexr玩耍,并且不知道该如何处理。我尝试使用SED如下:
echo $EX | sed /([0-9])d+/
,但这无能为力,只会给我一个错误。什么是更好的方法,如果SED是最好的方法,我在做什么错?我看过教程,看来我应该能够以这种方式匹配正则表达式。
这取决于您如何知道自己想要的东西。例如
dwalker$ EX=/home/directory/this/might/have/numbers23/12349_2348/more/paths
dwalker$ echo $EX | egrep -o 'd+_d+'
12349_2348
5位数,然后是下划线,然后是4位数字:
dwalker$ EX=/home/directory/this/might/have/numbers23/12349_2348/more/paths
dwalker$ echo $EX | egrep -o 'd{5}_d{4}'
12349_2348
如果您知道您需要从结尾处取下2个子目录,然后剩下的就是您的目录,可以做到这一点:
$ EX1=`dirname $EX`
$ EX1=`dirname $EX`
$ basename $EX1
12349_2348
所以有几种方法可以做到。
egrep是"扩展"的grep。它使您可以将 d用于数字和其他东西。您可以查看Man页面以获取更多详细信息,并为-O。