如何打印出bash shell脚本中找到的行和一行一行?

时间:2017-05-01 20:32:47

标签: bash shell text

我有一个.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循环中不起作用。

1 个答案:

答案 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管道来摆脱这种情况,但这会消除可能的风险,即消除发生的合法行本身就是双击。