【发布时间】:2015-06-24 15:25:03
【问题描述】:
我正在尝试使用 Shell 脚本逐行读取文本文件。我一直在做的是
while read line
do
var1=$(grep -s "Completed" $line)
var2=$(grep -s "Script Finished" $line)
if[ "$var1" = "$line" ]
break
else
if[ "$var2" = "$line" ]
count='expr $count + 1'
else
countinue
fi
fi
done < file.txt
如果您有任何建议,请告诉我!我对其他选择持开放态度,因为我一直在尝试这样做太久。
澄清:
我正在逐行浏览文件(while 循环),然后我正在查找该行以查看“已完成”是否为子字符串,并查看“脚本已完成”是否为子字符串(Grep 会将变量设置为整条线)。因此,当我检查变量是否已完成时,如果不检查“脚本完成”是否是子字符串,我想跳出 while 循环,这样我就可以增加一个计数器(我试图计算在“之前完成了多少脚本”完成”)。
困惑:
当我做 var1=$(grep -s "Completed" $line) 为什么它会找到 Completed 的所有实例...我想如果我逐行遍历它只会找到该特定行中的实例。
编辑:
我使用了下面的 awk 答案。我所要做的就是删除 {next} 语句,它可以完美运行。
谢谢
【问题讨论】:
-
你想用这个实现什么?您能提供一些相关信息吗?
-
是的,当然我很抱歉。我正在尝试浏览一个列出脚本运行时间的文件。所以我只关心脚本是否完成..如果它完成了,我会增加计数器。但是,脚本是分块运行的。早上下午和晚上。所以我用“blah blah”(脚本完成)打破循环,因为这将是早上完成的脚本数量
-
如果您不尝试一次全部完成,而是专注于使各个部分工作,那么您将更轻松地执行此操作并找到相关资源。例如,您应该定义两个字符串
a="hello world" b="panda"并尝试编写一个比较它们的 if 语句(然后设置b=$a以确保正面和负面情况都有效)。谷歌“如何比较 shell 脚本中的字符串”比“如何逐行读取文本文件,检查该行是否有特定字符串”要容易得多。 -
我想我最重要的问题是,如果我将 grep 设置为变量,它会返回什么。
-
Grep 返回那个,无论如何它会返回什么。不管你是否指向一个变量。
标签: linux shell unix scripting