2012-05-20 90 views
0

的幾串不同的線,我有以下輸入:打印只能從bash腳本

/ > blablabla 
title 1 
------- 
title 2 
------- 
... 
------- 
title n 
/> 

現在我需要閱讀只包含標題行,所以我必須刪除------和/>。 我設法排除所有-----用:

if [ "$LINE" != "-------" ] 

但problme是除去兩行:

/ >blablabla 
/> 

(其中blablabla能可能變動)。我想排除所有以字符串開始的字符串:「/>」 但是我嘗試了幾種方法但沒有成功。

有了:

if [[ $LINE!=/* ]] 

我沒有成功。 獲得該結果的正確方法是什麼?

在此先感謝。

回答

1
while read line; do 
    case $line in 
    '/ >'*|---*) 
     continue;; 
    esac 
    echo "$line" 
done << \EOF 
/>blablabla 
title 1 
------- 
title 2 
------- 
... 
------- 
title n 
/> 
EOF 
+0

它很有效。唯一奇怪的問題是第一行(/> blablablala)仍在打印。任何想法? – Ivan

+0

我對你的模式做了測試......待命,我將包括整個事情,以便你可以看到它的分歧。順便說一句,我還建議簡化爲'/ * | --- *)' – DigitalRoss

+0

我剛剛編輯我的問題,以糾正第一行的一個小錯誤。正確的模式是/> blablabla(在blabla之前有一個空格...)。 – Ivan

4

遍歷只有標題,你可以嘗試以下方法:

grep -vE '^(/ >|---)' your_file.txt |while read line; do 
    # process the titles 
    echo $line 
done 

這樣就可以排除兩種類型,你不關心線。

1
pattern='^/ > |^-------' 
while read -r line 
do 
    if [[ ! $line =~ $pattern ]] 
    then 
     printf '%s\n' "$line" 
    fi 
done < inputfile