Bash:Grep行号与AWK NR对应

时间:2017-04-26 21:35:30

标签: bash awk grep

我怀疑我要走很远的路,但请耐心等待我,我是Bash,grep和awk的新手......

我的问题摘要是grep中的行号与文件中的实际行号不对应。从我收集的内容中,空行被丢弃在行号中。我宁愿不遍历文件中的每一行以确保100%的覆盖率。

我要做的是从文件中抓取一段线并使用grep和awk处理它们

  1. grep调用获取一个行号列表,因为可能有一个以上的起始位置实例'在文件中:

    startLnPOSs=($(cat "$c"| grep -e '^[^#]' | grep --label=root -e '^[[:space:]]start-pattern' -n -T | awk '{print $1}'

  2. 然后使用awk我从起点迭代直到结束'遇到令牌。

    declarations=($(cat "$c" | awk "$startLnPos;/end-pattern/{exit}" ))

1 个答案:

答案 0 :(得分:1)

对我来说,这看起来有点像xy问题,因为你向我们展示了你在解决问题所做的工作,但实际上没有概述问题。

所以我猜想你想要将开始/结束模式之间的所有项目都返回给你的数组(这也可能是错误的,但我们又不知道整体情况)。

所以你能做的是:

declarations=($(awk '/start-pattern/,/end-pattern/' "$c"))

或者使用sed(完全相同):

declarations=($(sed -n '/start-pattern/,/end-pattern/p' "$c"))

根据您是否想要包含这些实际行,可能需要稍微修改一些命令。

这是你想要做的事情吗?