2010-08-16 47 views
0

10.11.183.81,aaa_XXX150.csv,bbb_YYYY_20100807.csv子由炭範圍

如何可以獲得每之間串,和_

如AAA BBB

回答

0

下面有一個例子

echo "10.11.183.81,aaa_XXX150.csv,bbb_YYYY_20100807.csv" | grep -o ",[^_]*_" 

那麼,上面的命令將在輸出中包含','和'_' 要排除此項,您可以使用

echo "10.11.183.81,aaa_XXX150.csv,bbb_YYYY_20100807.csv" | pcregrep -o "(?<=,).*?(?=_)" 

正則表達式(?<=,).*?(?=_)傳遞給pcregrep使用「回顧後」和由「pcregrep」

0
$ s="10.11.183.81,aaa_XXX150.csv,bbb_YYYY_20100807.csv" 
$ echo $s|tr "_" "\n"|sed -n '/,/s/.*,//p' 
aaa 
bbb 
0

支持正則表達式的「先行」技術。如果有什麼你要求的是發揮的重要作用純巴什解決方案,即你不希望調用外部程序,你可以嘗試這樣的事:

str=10.11.183.81,aaa_XXX150.csv,bbb_YYYY_20100807.csv 

while [[ "$str" =~ "," ]]; do 
    str=${str#*,} 
    echo ${str%%_*} 
done 

輸出是:

aaa 
bbb 

只要字符串中至少有一個逗號,while循環就會執行。然後,第一行刪除字符串左邊的所有字符,直到第一個逗號(包括第一個逗號),第二行輸出字符串,排除從第一個下劃線到字符串末尾的所有內容。

請注意原始字符串($ str)被修改。

1

純擊:

string="10.11.183.81,aaa_XXX150.csv,bbb_YYYY_20100807.csv" 

IFS=','      # separator for splitting 
array=(${string#*,})   # split string after the first comma 
array=(${array[@]%%_*})  # delete trailing '_*' for each element 

echo -e "${array[@]}"   # gives 'aaa bbb' 
+0

整潔:)不是我的解決方案更優雅,讓你值得+1。 – 2010-08-16 18:07:52