2009-12-04 40 views
0

我在bash文件中有一個循環來顯示目錄中的所有文件,每個文件都是它自己的變量。我需要採取該變量(文件名),並解析出只有一部分。如何使用bash僅解析出具有不同分隔符的變量的一部分?

例子:

92378478234978ehbWHATIWANT#98712398712398723

現在,假設 「EHB」 和英鎊符號不能改變的,我如何才能捕捉WHATIWANT到自己的變量?


到目前爲止,我有:

#!/bin/bash 
for FILENAME in `dir -d *` ; do 

done 

+2

爲註釋:它可能會更好寫'爲*號文件;做...; done' - 'dir -d *'似乎是多餘的。 – ephemient 2009-12-04 04:58:02

回答

6

您可以使用sed編輯出你不想要的部分。

want=$(echo "$FILENAME" | sed -e 's/.*ehb\(.*\)#.*/\1/') 

或者您可以使用Bash的參數擴展來去除尾部和頭部。

want=${FILENAME%#*}; want=${want#*ehb} 
0

一種可能性:

for i in '92378478234978ehbWHATIWANT#98712398712398723' ; do 
    j=$(echo $i | sed -e 's/^.*ehb//' -e 's/#.*$//') 
    echo $j 
done 

生產:

WHATIWANT 
0

只使用bash shell中,無需外部工具

$ string=92378478234978ehbWHATIWANT#98712398712398723 
$ echo ${string#*ehb} 
WHATIWANT#98712398712398723 
$ string=${string#*ehb} 
$ echo ${string%#*} 
WHATIWANT 
相關問題