2010-03-19 124 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