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

时间:2015-04-07 14:55:09

标签: bash 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'
--
    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'

我如何才能得到这样的结果:

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脚本中。怎么做?

我需要获得第一个结果,然后接下来的结果是我的文本文件

2 个答案:

答案 0 :(得分:1)

这将为您提供记录4 ..

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

依此类推。该命令考虑到该记录将为8行长,-A8将输出匹配行以及其后的8行。< / p>

您可以创建一个小循环来为每个感兴趣的记录执行命令,并将循环的输出重定向到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' '$1 ~ /\y(4|17|18|19):/' RS="\n *--\n" input.txt > output.txt

答案 1 :(得分:0)

谢谢!它的工作!

我用这个:

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