2013-02-18 28 views
0

我有這種結構的文本文件:從一個文件中的shell腳本中選擇一個特定的詞

.... 

"/home/letizia/Documents/SpanishSegmentation/Recordings/segmented/mfc/F001.0.rec" 
COGE 
LAS 
HOJAS 
Y 
LAS 
QUEMAS 
TODAS 
EN 
EL 
FUEGO 
"/home/letizia/Documents/SpanishSegmentation/Recordings/segmented/mfc/F002.0.rec" 
LA 
LIGA 
DE 
PAZ 
SE 
REUNIO314201 
PARA 
TRATAR 
EL 
TEMA 
.... 

,我想選擇「F0001.0」和「F0002.0」。

我使用:

 ID="F" 
    if [[ "$LINE" == *Recordings* ]] 
    then   
    SEGMENT=`echo $LINE | grep -o $ID.* | cut -d'.' -f1-2` 
    fi 

,但它不工作。錯誤在哪裏?

非常感謝您提前。

回答

1

你需要一個while循環:

while IFS= read -r line; do 
    id="F" 
    if [[ "$line" =~ /Recordings/ ]]; then 

     segment=$(echo $line | grep -o "$id.*" | cut -d '.' -f1-2) 
     echo "$segment" 
    fi 
done < file.txt 

結果:

F001.0 
F002.0 

然而,更好的辦法是使用sed

sed -n '/Recordings/s#.*/\(F[^\.]*\.[^\.]*\).*#\1#p' file.txt 
2

嘗試使用sed代替:

sed -n '[email protected]^".*/Recordings/.*/\(.*\)"[email protected]\[email protected]' file.txt 

走馬觀花:

  1. -n:除非有特別要求(由最終p)不顯示任何信息。
  2. [email protected]:直到下一個@替代部分,直到後面的那個部分。
  3. ^".*/Recordings/.*/\(.*\)"$:匹配以雙引號開頭和結尾的行,包含/ Recordings /,並且一直到最後一個斜槓爲止。
  4. \1:用最後一部分替換匹配的字符串(我們用圓括號表示)。
+0

如果你喜歡我的回答,你可以爲它投票和/或接受它作爲你的首選解決方案。享受StackOverflow! – 2013-02-18 12:53:09

相關問題