加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 逐行读取文本文件并检查该行是否具有某个字符串

发布时间:2020-12-14 01:12:40 所属栏目:Linux 来源:网络整理
导读:我试图使用 Shell Scripting逐行读取文本文件.我一直在做的是 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 cou
我试图使用 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返回一整行,你是否正在测试“等等”并期待只是因为整个结果只是“等等”?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读