2014-12-11 156 views
0

我有一個bash腳本,通過一個文件行(a.txt)循環包含gzip文件列表的路徑,並使用zgrep在每個文件中搜索短語。命令行和bash腳本中的不同zgrep輸出

我的bash腳本是:

for i in $(cat $1); do 
    echo $i; 
    echo zgrep -E '"phrase1|phrase2|phrase3|phrase4|phrase5|phrase6"' $i; 
    zgrep -E '"phrase1|phrase2|phrase3|phrase4|phrase5|phrase6"' $i; 
done 

我稱之爲由myscript.sh a.txt

輸出是:

zgrep -E "phrase1|phrase2|phrase3|phrase4|phrase5|phrase6" myzippedfile.1.gz 
phrase2  48  48.00 48 
phrase3  35  35.00 35 
phrase4  67  67.00 67 
phrase5  99  99.00 99 

(重複在a.txt列出的每個文件)。

但是,當我執行zgrep命令是在腳本循環內執行,我得到不同的輸出。

執行:

zgrep -E "phrase1|phrase2|phrase3|phrase4|phrase5|phrase6" myzippedfile.1.gz 

在命令行收率:

phrase1  29  29.00 29 
phrase2  48  48.00 48 
phrase3  35  35.00 35 
phrase4  67  67.00 67 
phrase5  99  99.00 99 
phrase6  54  54.00 54 

該輸出是正確的,而來自for循環bash腳本所產生的輸出是缺失所述第一行和最後一行。怎麼會這樣?

有沒有人在我的bash腳本中看到任何問題?爲什麼第一行和最後一行會從輸出中丟失?

回答

0

替代選項中的第一個和最後一個元素包含文字"字符。因此,如果在它之前有",那麼只能匹配phrase1,並且如果在它之後有",則只匹配phrase6。你不應該在模式的雙引號,應該是:

zgrep -E 'phrase1|phrase2|phrase3|phrase4|phrase5|phrase6' $i; 

你沒有多餘的報價,當你用手執行zgrep命令。

+0

啊是的!我對bash腳本非常陌生,所以這真的幫了我很大的忙。謝謝! – Brett 2014-12-11 00:46:29