我正在尝试使用带有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
答案 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;将使用未声明的变量作为错误。