如何从 Bash 中的文本文件中获取第二个结果?

How to grep second results from text file in Bash?

我有包含以下内容的文本文件:

4

:
      ID: 5
      table: 4
      numplan: no_change
      accs-cat: no_change
      cld-rule: $
      cld-type: no_change
      cld-numplan: no_change
      clg-rule: '----------+79975532211'
--
    17:
      ID: 19
      table: 7
      numplan: no_change
      accs-cat: no_change
      cld-rule: $
      cld-type: no_change
      cld-numplan: no_change
      clg-rule: '----------+79975532211'
--
    18:
      ID: 20
      table: 3
      numplan: no_change
      accs-cat: no_change
      cld-rule: $
      cld-type: no_change
      cld-numplan: no_change
      clg-rule: '----------+79975532211'
--
    19:
      ID: 21
      table: 5
      numplan: no_change
      accs-cat: no_change
      cld-rule: $
      cld-type: no_change
      cld-numplan: no_change
      clg-rule: '----------+79975532211'

我怎样才能像这样 grep 结果:

4:
      ID: 5
      table: 4
      numplan: no_change
      accs-cat: no_change
      cld-rule: $
      cld-type: no_change
      cld-numplan: no_change
      clg-rule: '----------+79975532211'

然后我 grep 这个结果:

17:
      ID: 19
      table: 7
      numplan: no_change
      accs-cat: no_change
      cld-rule: $
      cld-type: no_change
      cld-numplan: no_change
      clg-rule: '----------+79975532211'

然后我得到这个结果:

18:
      ID: 20
      table: 3
      numplan: no_change
      accs-cat: no_change
      cld-rule: $
      cld-type: no_change
      cld-numplan: no_change
      clg-rule: '----------+79975532211'

然后我得到这个结果:

19:
      ID: 21
      table: 5
      numplan: no_change
      accs-cat: no_change
      cld-rule: $
      cld-type: no_change
      cld-numplan: no_change
      clg-rule: '----------+79975532211'

我需要 grep 这个结果在一个 Bash 脚本中。怎么做?

我需要得到第一个结果,然后在我的文本文件中得到下一个结果

这会给你记录4..

grep -A8 '[[:space:]]*4:' file

等等。该命令考虑到记录的长度为 8 行,-A8 将输出匹配行及其后的 8 行.

您可以创建一个小循环来为每条感兴趣的记录执行命令,并将循环的输出重定向到 text.file:

for i in 4 17 18 19 ; do
    grep -E -A8 "[[:space:]]*$i:" input.txt
done > output.txt

或者您可以使用 awk 使用记录分隔符 RS="\n *--\n":

awk -F$'\n' ' ~ /\y(4|17|18|19):/' RS="\n *--\n" input.txt > output.txt

谢谢!是工作!

我用这个:

for i in 4 17 18 19 ; do
    grep -E -A8 "[[:space:]]*$i:" input.txt
done > output.txt