我有一个.txt文件,打印出数百行文本,这些文本是许多测试的结果。在测试开始时它说
启动测试:{nameOfTest}。
然后继续打印出哪个测试通过,哪个测试失败。在测试结束时打印出来
============================================ 在0.000秒内完成3次测试,3次成功,0次失败
这些是.txt文件中的两行。我想要做的是打印出LAUNCH TEST和测试结果。
我知道我可以像这样遍历txt文件的每一行:
cat ~/sample.txt | while read line; do
#Then compare "$line" with what I am searching for
所以问题是我如何搜索行"包含"某些字符串然后打印出来吗?
类似的东西,
if [[ "$line" == *"LAUNCH TEST"* ]]; then
echo $line
echo "This was the test found"
fi
但由于某种原因,这种比较在while循环中不起作用。
答案 0 :(得分:0)
如果您想打印匹配的行以及后面的行匹配,您可以使用awk:
awk '/LAUNCH TEST/{print $0; flag=1; next} {if (flag) print $0;} /.*/{flag=0} ' ~/sample.txt
这个脚本演示了使用'标志的典型awk习语。变量以打开和关闭某些行的打印。请注意使用next
命令阻止两次打印匹配的行。
使用grep
,您可以使用-A1
参数来打印下一行
grep -A1 ~/sample.txt
但是,grep会在每场比赛之间加上一条双击。您可以通过grep管道来摆脱这种情况,但这会消除可能的风险,即消除发生的合法行本身就是双击。