2015-06-12 39 views
2

我想從使用grep與IF stmt的文件中找到特定的字符串。但我無法這樣做。輸入文件(文件名:input_file_txt)包含大量的字符串,我只能從中刪除需要搜索的值。我正在使用awk並將其寫入文件。然後,使用grep,搜索字符串。我最終發現了一個奇怪的錯誤,我無法弄清楚。給輸入文件的內容,代碼我用和錯誤消息我得到使用grep與if語句搜索字符串

內容input_file_txt

123456 ----- abcd|abcd_vasa|nodatapts|1 ----- Assigned ----- @assignee ----- 0 ----- 2015-06-12 
789011 ----- abcd|efgh_vasa|yesdata|56 ----- WIP ----- @assignee ----- 0 ----- 2015-06-12 

而且我的代碼:

我得到
while 

read LINE 
echo "$LINE" 
echo "going into the loop" 

do 

echo $LINE|awk -F\----- '{ print $2 }' >> /var/tmp/dummy_file 
cat /var/tmp/dummy_file 

if [ grep -q -i -E "abcd" /var/tmp/dummy_file ];then 

count=expr "$count" + 1 
echo "$count" 
echo "$LINE" >> /var/tmp/dummy_ticket_NA 
cat /var/tmp/dummy_ticket_NA 

fi 

done < /var/tmp/input_file_txt` 

錯誤信息:

123456 ----- abcd|abcd_vasa|nodatapts|1 ----- Assigned ----- @assignee ----- 0 ----- 2015-06-12 
going into the loop 
abcd_vasa 

going into the loop 

going into the loop 

going into the loop 

going into the loop 

going into the loop 

預期的O/P爲:

123456 ----- abcd|abcd_vasa|nodatapts|1 ----- Assigned ----- @assignee ----- 0 ----- 2015-06-12 
going into the loop 
abcd_vasa 
1 
abcd_vasa 
+1

請參閱[Bash Pitfall#9](http://mywiki.wooledge.org/BashPitfalls#if_.5Bgrep_foo_myfile.5D) – kojiro

回答

0

@ kojiro的鏈接指向您的問題,'['是一個命令(測試命令),不是if語句語法的一部分。

if語句你寫的:

if [ grep -q "abcd" /var/tmp/dummy_file ];then 

等同於:

if test grep -q "abcd" /var/tmp/dummy_file ]; then 

要使用如grep命令在if語句的Elid只是括號:

if grep -q "abcd" /var/tmp/dummy_file; then 
    ... 
fi 

在您的設置中設置-x-e-u bash腳本,特別是-x當你調試它們時可能非常有價值,因爲它會打印在腳本中執行的每條語句。 '-e'將導致你的腳本退出第一個不成功的命令(快速失敗),'-u'將使用任何未聲明的變量作爲錯誤。

+0

感謝您的補充說明。但是,是否有示例顯示'-x','-e'和'-u'?只是爲了更好地理解它們。 – user3624000

+0

上述更正已經工作..我能夠看到o/p但迭代仍然...新o/p我得到的是:'123456 ----- abcd | abcd_vasa | nodatapts | 1 - --- -----分配----- @assignee 0 ----- 2015年6月12日 進入環路 abcd_vasa abcd_vasa進入環路 進入環路 進入循環 進入循環' – user3624000

+0

另外,我在現有的'grep'命令中添加了命令'-i','-E'。編輯原始帖子.... – user3624000