匹配包含特殊字符的第一行后,在文件中获取多行

时间:2013-10-03 20:53:26

标签: string perl awk

我有一个我正在创建的perl脚本,我需要从文件中获取几行。我知道我想要匹配的第一行,我将它放在一个字符串中。字符串包含...

DEFINE QLOCAL ('NAME.OF.QUEUE1') +

我需要将上面的行与我想要获取的文本块的第一行匹配,并将所有内容转储到下一个空行到数组。

示例数据文件

DEFINE QLOCAL ('NAME.OF.QUEUE0') +
  DESCR('Description') +
  PUT(DISABLED) +
  GET(DISABLED) +
  RETURN

DEFINE QLOCAL ('NAME.OF.QUEUE1') +
  DESCR('Description') +
  PUT(ENABLED) +
  GET(ENABLED) +
  RETURN

DEFINE QREMOTE ('NAME.OF.QUEUE1') +
  DESCR('Description') +
  PUT(ENABLED) +
  GET(DISABLED) +
  MAXDEPTH(1000) +
  RETURN

我一直试图让以下awk命令工作

awk '/$Object/' RS= file.txt

如果$ Object只是NAME.OF.QUEUE1,我可以获得结果,但它适用于QLOCAL和QREMOTE。我需要匹配整行,而不仅仅是NAME.OF.QUEUE1。如果我将$ Object设置为等于整个第一行,我就没有结果。

这是我从Perl那里打来的,而不是让它工作

my $Object="DEFINE QLOCAL ('NAME.OF.QUEUE1') +\n";
my @ObjectValues = `awk '/$Object/' RS= file.txt`;

任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:2)

假设您有一个shell变量Object

Object="DEFINE QLOCAL ('NAME.OF.QUEUE1') +"

请注意\n中没有结尾Object,您可以:

awk -v o="$Object" -v RS= -F'\n' '$1==o' file

使用您的文件,输出:

kent$  awk -v o="$Object" -v RS= -F'\n' '$1==o' file
DEFINE QLOCAL ('NAME.OF.QUEUE1') +
  DESCR('Description') +
  PUT(ENABLED) +
  GET(ENABLED) +
  RETURN