如何在Shell脚本中忽略多余行,仅输出所需的目标内容
Shell脚本过滤output.txt无关行解决方案
最优解决方案(grep正向匹配,逻辑简单不易出错)
你要保留的行有固定格式特征,直接用正则匹配需要的内容即可,执行以下命令即可完成过滤:
grep -E '^( *A[0-9A-Za-z]+ +| *[0-9]+\. +)' output.txt > output_filtered.txt && mv output_filtered.txt output.txt
命令说明:
-E参数开启扩展正则表达式支持,无需转义特殊字符- 正则规则匹配两类你需要保留的行:
- 以任意数量空格开头,后跟A开头的字母数字串(对应你的表头行)
- 以任意数量空格开头,后跟
数字+英文点格式的序号(对应你的数据行)
- 所有不符合上述规则的*行、随机字母乱码行(无论大小写)都会被自动过滤
集成到run.sh的方法
如果要避免生成中间文件,直接在你原来生成output.txt的命令后加管道即可,比如原来的逻辑是:
# 原来生成output.txt的命令 your_exec_command > output.txt
修改为:
# 直接输出过滤后的结果到output.txt your_exec_command | grep -E '^( *A[0-9A-Za-z]+ +| *[0-9]+\. +)' > output.txt
备选方案(awk实现,适合后续需处理列数据的场景)
如果你后续需要对保留的列做计算、提取等操作,可以用awk实现相同过滤效果:
awk '/^ *A[0-9A-Za-z]+ +/ || /^ *[0-9]+\. +/' output.txt > output_filtered.txt && mv output_filtered.txt output.txt
内容的提问来源于stack exchange,提问作者Saurabh
相关产品推荐
相关产品推荐

