需要使用grep和正则表达式在文件中找到以下模式: -
$form->AddFields({
type => 'hidden',
name => 'xyz',
value => 0,
});
我认为我们需要使用多行grep。 任何人都可以帮忙。?
答案 0 :(得分:4)
使用awk:
awk '{ printf /id =>/? FS: $0 RS}' RS='});' file
$form->AddFields({
id => 2048
type => 'hidden',
name => 'xyz',
value => 0,
});
$form->AddFields({
type => 'hidden',
name => 'xyz',
value => 0,
});
$form->AddFields({
type => 'hidden',
name => 'xyz',
id => 1024,
value => 0,
});
$form->AddFields({
type => 'hidden',
name => 'xyz',
value => 0,
});
答案 1 :(得分:0)
它不是grep语句,但可能想尝试这个Perl脚本(假设您通过STDIN提供输入)。它还假设您没有在输入中截断的任何形式(在输入结束之后输入开始或结束之前开始的形式),但是如果它们是那么处理这些条件的方法与你相关。
use strict;
use warnings;
sub processRecord {
my ($record) = @_;
my $text = join("\n", @{$record});
print "$text\n" unless $text =~ /ID\s*=>\s*/;
}
my $recordStart = qr/^\s*\$form\s*->\s*AddFields\s*\(\s*\{\s*/;
my $recordEnd = qr/\s*\}\s*\)\s*;\s*$/;
my @record;
my $inRecord = 0;
while (my $line=<>) {
next unless $line =~ /\S/;
chomp($line);
$inRecord = 1 if $line =~ /$recordStart/;
if ($line =~ /$recordEnd/) {
push(@record, $line);
processRecord(\@record);
@record = ();
$inRecord = 0;
next;
}
push(@record, $line) if $inRecord;
}