ABCDchinchwad18-Mar-2010-11.sql.zip選擇文本字符串
ABCDsolapur18-Mar-2010-10.sql.zip
如何找到「ABCD」和日期之間的串「18-MAR-2010」
預計resuts:
金傑沃德
肖拉普爾
ABCDchinchwad18-Mar-2010-11.sql.zip選擇文本字符串
ABCDsolapur18-Mar-2010-10.sql.zip
如何找到「ABCD」和日期之間的串「18-MAR-2010」
預計resuts:
金傑沃德
肖拉普爾
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|'
也許你應該去正則表達式
"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
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}'
@ ghostdog74,OP在上面的評論中有一個新的要求。 – 2010-03-19 13:11:35
文件名包含以下內容輸入
ABCDchinchwad18-Mar-2010-11.sql.zip
ABCDsolapur18-Mar-2010-10.sql.zip
sed -r 's/([A-Z]+)([a-z]+)(.*)/\2/' filename
輸出是
金傑沃德
solapur
#查找。 -maxdepth 1 -name「* .zip」| sed -r'/([A-Z] +)([a-z] +)(。*)/ \ 2 /' ## ./chinchwad和./solapur#如何刪除路徑? – shantanuo 2010-03-19 11:18:08
@shantanuo,如果你正在使用maxdepth 1,那麼你可能只需要使用'ls'來做一個列表。 – ghostdog74 2010-03-19 13:40:45
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'
使用find具有遞歸優勢,但使用maxdepth 1與您的'ls'版本相同,除了更長的:) – ghostdog74 2010-03-19 13:40:16
該字符串可以包含一個數字。例如, ABCDpune218-Mar-2010-10.sql.zip#並且我想在這種情況下返回pune2。 – shantanuo 2010-03-19 12:00:57