2012-05-20 53 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