while read linedo var1=$(grep -s "Completed" $line) var2=$(grep -s "Script Finished" $line)if[ "$var1" = "$line" ] breakelse if[ "$var2" = "$line" ] count='expr $count + 1' else countinue fifidone < file.txt
如果您有任何建议,请让我知道!我对其他选择持开放态度,因为我一直试图这么做.
澄清:
我逐行浏览一个文件(while循环)然后我在grepPing那一行,看看“Completed”是否是一个子字符串,并查看“Script Finished”是否是一个子字符串(Grep将变量设置为整行).那么当我检查变量是否已完成时我想要打破while循环,如果不检查“Script Finished”是否是一个子串,那么我可以递增一个计数器(我试图计算在完成之前完成的脚本数量)完成”).
关于:
当我做var1 = $(grep -s“已完成”$line)为什么它会找到所有已完成的实例…我想如果我逐行浏览它只会找到该特定行中的实例.
编辑:
我用下面的awk答案.我所要做的就是删除{next}语句,它完美无缺.
谢谢
解决方法 你有几个错误.另外,您可能需要考虑一种用于执行此类 *** 作的工具. awk是其中一种工具.awk '/blah blah/ {exit} /Finished/ {count+=1} {next} END{ print count} ' filename
当第一行在线上的任何地方匹配“blah blah”时退出.
第二行计算“完成”匹配的数量.
{next}位用于保持读取而不打印每一行 – 这在某些版本的awk中会发生.
最后一行END {}函数在代码完成文件时运行.它显示count的值.
我选择了awk方法而不是尝试修复shell脚本中的逻辑和语法错误.如果您需要这种帮助,请考虑在命令行上单独播放几乎所有代码块(或行).我假设你使用了bash.
错误示例
-eq to compare strings,use =,example: [ "$var" = "something" ]$(var1) should be either "${var1}" or "$var1" lines 4 and 8
grep返回一整行,你是否正在测试“等等”并期待只是因为整个结果只是“等等”?
总结以上是内存溢出为你收集整理的linux – 逐行读取文本文件并检查该行是否具有某个字符串全部内容,希望文章能够帮你解决linux – 逐行读取文本文件并检查该行是否具有某个字符串所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)