2013-12-16 42 views
0

我想弄清楚爲什麼這不會檢查文件中的行並回顯 如何比較或檢查字符串是否包含某些內容?檢查文件中的行是否包含Bash中的模式

#!/bin/bash 
while read line 
do 
    #if the line ends 
    if [[ "$line" == '*Bye$' ]] 
    then 
    : 
     #if the line ends 
    elif [[ "$line" == '*Fly$' ]] 
    then 
     echo "\*\*\*"$line"\*\*\*" 
    fi 
done < file.txt 

回答

3

的問題是,*Bye$不是一個shell模式(外殼的圖案不要使用$符號,他們只是使用缺乏的後*)—即使是這樣,把它在單引號會禁用它。相反,只需寫:

if [[ "$line" == *Bye ]] 

(以及類似的Fly)。

1

如果你想使用適當正則表達式,這是與=~操作完成,如:

if [[ "$line" =~ Bye$ ]] 

有限的正則表達式,你從外殼的圖案得到與==不包括的東西像終點線標記$

請注意,你可以做這個簡單的與外殼的圖案(*Bye),但是,如果你想要的正則表達式(或者甚至只是一個一致的符號)的全部力量,=~是要走的路。

+1

在正則表達式的開頭放置'^。*'根本不會改變它的含義。 –

+0

@馬克,你說得對,但這與問題或答案無關。這只是一個示例正則表達式值用於測試。不過,我會改變它以避免任何不必要的討論。 – paxdiablo