linux – 逐行读取文本文件并检查该行是否具有某个字符串
我试图使用
Shell Scripting逐行读取文本文件.我一直在做的是
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循环)然后我在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返回一整行,你是否正在测试“等等”并期待只是因为整个结果只是“等等”? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |