使用带有if语句的grep搜索字符串

时间:2015-06-12 11:47:14

标签: bash shell

我正在尝试使用带有IF stmt的grep从文件中查找特定字符串。但我无法这样做。输入文件(文件名:input_file_txt)包含大量字符串,我将从中减少并仅获取需要搜索的值。我正在使用awk并将其写入文件。然后,使用grep搜索字符串。我最终得到了一个奇怪的错误,我无法弄明白。给出输入文件内容,我使用的代码和我得到的错误消息

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 个答案:

答案 0 :(得分:0)

@ kojiro的链接指向您的问题,&#39; [&#39;是一个命令(测试命令),不是if语句的语法的一部分。

你写的if语句:

drawHorizontal.addComponent(image);

相当于:

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

在if语句中使用像grep这样的命令只是忽略括号:

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

在您的bash脚本中设置if grep -q "abcd" /var/tmp/dummy_file; then ... fi -x-e,尤其是-u,当您进行调试时,它们非常有价值,因为它会打印每个语句在您的脚本中执行。 &#39; -e&#39;将导致您的脚本退出第一个不成功的命令(快速失败)和&#39; -u&#39;将使用未声明的变量作为错误。