如何验证文件中特定三行的出现并输出匹配结果及示例
匹配文件中特定连续三行的解决方案
我平时处理这类连续行匹配的需求时,常用下面几个命令行工具,简单直接就能搞定:
方案一:使用 grep 命令
grep 的 -A 参数可以显示匹配行之后的指定行数,结合正则表达式就能精准匹配你的需求:
grep -A2 '^/var/log/report$' your_file.txt | grep -B2 -E '^[A-Za-z]+$' | while read -r line1 && read -r line2 && read -r line3; do echo "OK" echo "匹配到的行示例:" echo "$line1" echo "$line2" echo "$line3" echo "---" done
命令解释:
-A2:找到第一行是/var/log/report的行后,同时显示它后面的2行- 第二个
grep用-B2配合正则^[A-Za-z]+$,找到第三行是纯字母的行,同时显示它前面的2行 - 最后用
while循环读取这三行,输出OK和匹配示例
方案二:使用 awk 脚本
awk 更适合处理行关联的逻辑,我们可以跟踪前两行的内容,当满足条件时输出结果:
awk ' prev2 == "/var/log/report" && prev1 == "{" && /^[A-Za-z]+$/ { print "OK" print "匹配到的行示例:" print prev2 print prev1 print $0 print "---" } { prev2 = prev1; prev1 = $0 } ' your_file.txt
脚本解释:
- 用
prev2和prev1分别记录前前一行和前一行的内容 - 当当前行是纯字母字符串,且前两行分别是
/var/log/report和{时,触发输出 - 每次循环更新
prev2和prev1的值,保持跟踪状态
示例输出(当匹配到符合条件的行时):
OK 匹配到的行示例: /var/log/report { ExampleWord --- OK 匹配到的行示例: /var/log/report { TestString ---
内容的提问来源于stack exchange,提问作者yael
相关产品推荐
相关产品推荐

