2013-06-28 52 views
0

我正在嘗試檢查分號的末尾,因爲它們導致我在運行服務器時出現了一些問題。爲此,我使用了一個bash腳本(因爲我更熟悉bash)通過這些行讀取並返回那些不以分號結尾的腳本。我的bash腳本如下從文件中獲取不以分號結尾的行

while read line 
do 
if[$line!=*;] 
echo $line 
fi 
done < $1 

當我運行該腳本,它說是fi一個錯誤,但我無法弄清楚。我也意識到這將返回像ifwhile這樣的語句,但這對我的需求會很好。

給出的樣本輸入

use CGI; 

print "<html>" 
print "<head>"; 
print "</head>"; 
print "<body><p> HELLO WORLD </p>"; 
print "</body>"; 
print "</html>" 

這應該是輸出

print "<html>" 
print "</html>" 
+1

你爲什麼不只是使用'grep'? –

+0

誠實地忘記了grep – Kyle

+0

你會發佈一個示例輸入文件嗎? – michael501

回答

2

我認爲最簡單的方法是使用grep。給定一個input.txt文件是這樣的:

spam 
foo;<Space><Space> 
sausage 
baked;<Tab> 
beans 
unladen; 

你可以做

grep -v ';\s*$' input.txt 

,並獲得

spam 
sausage 
beans 

的grep的-v標誌意味着 「迴歸不匹配這個正則表達式的所有行」,所以它將跳過所有以分號結尾的行。

如果你的行在分號後也有空格,\s*表示「任何空格字符序列」,所以grep會刪除這些行。

+0

看起來他想排除這些行,'grep -v'。 – Kevin

+0

@凱文,哎呀,你是對的! –

+0

這似乎是返回我的整個程序,不只是沒有分號的線條 – Kyle

2

您遇到問題的原因是您的if聲明需要then。您還需要更多空間並引用您的變量。但它仍然不起作用。你的比較也是錯誤的 - 這不是如何[工作來比較字符串。你可以使用bash的[[代替:

while read line 
do 
    if [[ "$line" != *\; ]] 
    then 
    echo "$line" 
    fi 
done < $1 

但即使這一切,你真的應該做的是:

grep -v ';$' $1