1

我有一个正在创建的 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`;

任何帮助,将不胜感激。

谢谢

4

1 回答 1

2

假设您有一个 shell 变量Object

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

请注意,没有以 结尾\nObject那么您可以:

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
于 2013-10-03T21:02:17.780 回答