2010-03-19 128 views
1

ABCDchinchwad18-Mar-2010-11.sql.zip选择文本字符串

ABCDsolapur18-Mar-2010-10.sql.zip

如何找到“ABCD”和日期之间的串“18-MAR-2010”

预计resuts:

金杰沃德

肖拉普尔

+0

该字符串可以包含一个数字。例如, ABCDpune218-Mar-2010-10.sql.zip#并且我想在这种情况下返回pune2。 – shantanuo 2010-03-19 12:00:57

回答

0
sed 's/ABCD\(.*\)[0-9]\{2\}-[[:alpha:]].*.sql.zip/\1/' 

输出:

chinchwad 

solapur 

pune2 

,以消除find(这更增加了路径灵活,便携和可维护性比parsing ls):

sed 's|.*/ABCD\(.*\)[0-9]\{2\}-[[:alpha:]].*.sql.zip|\1|' 
0

也许你应该去正则表达式

 
"ABCDchinchwad18-Mar-2010-11.sql.zip".match(/ABCD(\w+)[0-9]{2}-[a-zA-Z]{3}-[0-9]{4}/)[1]; //chinchwad 
"ABCDsolapur18-Mar-2010-10.sql.zip".match(/ABCD(\w+)[0-9]{2}-[a-zA-Z]{3}-[0-9]{4}/)[1]; // solapur 
1
for file in ABCD*zip 
do 
    file="${file/#ABCD/}" 
    echo ${file%%[0-9][0-9]-*-*} 
done 

或使用sed的

ls ABCD*zip | sed 's/^ABCD//;s/[0-9][0-9]-.*-.*//' 

或用awk

ls ABCD*zip | awk -F"[0-9][0-9]-|ABCD" '{print $2}' 
+0

@ ghostdog74,OP在上面的评论中有一个新的要求。 – 2010-03-19 13:11:35

0

文件名包含以下内容输入

ABCDchinchwad18-Mar-2010-11.sql.zip

ABCDsolapur18-Mar-2010-10.sql.zip

sed -r 's/([A-Z]+)([a-z]+)(.*)/\2/' filename 

输出是

金杰沃德

solapur

+0

#查找。 -maxdepth 1 -name“* .zip”| sed -r'/([A-Z] +)([a-z] +)(。*)/ \ 2 /' ## ./chinchwad和./solapur#如何删除路径? – shantanuo 2010-03-19 11:18:08

+0

@shantanuo,如果你正在使用maxdepth 1,那么你可能只需要使用'ls'来做一个列表。 – ghostdog74 2010-03-19 13:40:45

0

Perl会做的很好的位置:

ls *.zip | perl -pe 's/ABCD (\w+) \d{2}-\w{3}-\d{4} .*/$1/x' 

如果必须使用find

find . -maxdepth 1 -name \*.zip | 
    perl -pe 's/.* ABCD (\w+) \d{2}-\w{3}-\d{4} .*/$1/x' 
+0

使用find具有递归优势,但使用maxdepth 1与您的'ls'版本相同,除了更长的:) – ghostdog74 2010-03-19 13:40:16