我怀疑我要走很远的路,但请耐心等待我,我是Bash,grep和awk的新手......
我的问题摘要是grep中的行号与文件中的实际行号不对应。从我收集的内容中,空行被丢弃在行号中。我宁愿不遍历文件中的每一行以确保100%的覆盖率。
我要做的是从文件中抓取一段线并使用grep和awk处理它们
grep调用获取一个行号列表,因为可能有一个以上的起始位置实例'在文件中:
startLnPOSs=($(cat "$c"| grep -e '^[^#]' | grep --label=root -e '^[[:space:]]start-pattern' -n -T | awk '{print $1}'
然后使用awk我从起点迭代直到结束'遇到令牌。
declarations=($(cat "$c" | awk "$startLnPos;/end-pattern/{exit}" ))
答案 0 :(得分:1)
对我来说,这看起来有点像xy问题,因为你向我们展示了你在解决问题所做的工作,但实际上没有概述问题。
所以我猜想你想要将开始/结束模式之间的所有项目都返回给你的数组(这也可能是错误的,但我们又不知道整体情况)。
所以你能做的是:
declarations=($(awk '/start-pattern/,/end-pattern/' "$c"))
或者使用sed(完全相同):
declarations=($(sed -n '/start-pattern/,/end-pattern/p' "$c"))
根据您是否想要包含这些实际行,可能需要稍微修改一些命令。
这是你想要做的事情吗?