Shell:在文件中搜索模式并提取包含模式的数据块

时间:2011-01-26 20:15:42

标签: shell sed grep

给定的文件具有以下结构:

a 123
b 876234
c 56456
d 65765

a 9879
b 9361
c 6527
d 823468

所以有数据块(行以abcd开头,空行划分两个块)我正在寻找此文件中的模式(例如9361)。如果在内部找到此模式,我想复制整个块(以a 9879开头并以d 823468开头的行)并将其写入另一个文件。

此模式可在文件中找到零次或多次。如果有多个结果,则应将每个块写入另一个文件。

你会怎么做?

3 个答案:

答案 0 :(得分:3)

你可以用gawk来做。

gawk 'BEGIN {RS=""} /here goes your pattern/ { print $0}' INPUTFILE > OUTPUTFILE

这将gawk的记录分隔符设置为空行。

HTH

答案 1 :(得分:2)

假设您的数据位于file.txt中,这是perl中的解决方案。

perl -00 -ne "print if /9361/" file.txt

结果是在stdout上。

  • -00会导致perl一次读取一个段落。
  • -n使perl逐个读取文件名参数。
  • -e用于指定perl命令。

答案 2 :(得分:0)

红宝石(1.8 +)

ruby -00 -ne 'print if /9361/' file