Я бы начал с:
$ echo "--INFO----- Command processing: Name='shayam' Age='19' Project='Alwa'
--ERROR---- Failed to process
--INFO----- Command processing: Name='ram' Age='23' Project='Alwa'
--INFO----- Command processing: Name='raja' Age='24' Project='Alwa'
--INFO----- Command processing: Name='shyla' Age='27' Project='Alwa'
--ERROR---- Failed to process " | perl -ne '
if (/^--INFO--/) {@line = split;}
if (/^--ERROR--/) {print "$line[3] $line[4]\n";}'
, который производит:
Name='shayam' Age='19'
Name='shyla' Age='27'
Все, что он делает - это сохраняет информацию из каждой строки INFO
, а затем распечатывает ее, когда вы получаете строку ERROR
.
Вы заметите, что у него все еще есть кавычки вокруг значений, но, если вы действительно хотите избавиться от них, используйте (очень упрощенный) скрипт proc.pl
:
#!/bin/perl -w
while (<STDIN>) {
if (/^--INFO--/) {
@line = split;
}
if (/^--ERROR--/) {
$l3 = $line[3];
$l4 = $line[4];
$l3 =~ s/'//g;
$l4 =~ s/'//g;
print "$l3 $l4\n";
}
}
Запуск этого с:
$ echo "--INFO----- Command processing: Name='shayam' Age='19' Project='Alwa'
--ERROR---- Failed to process
--INFO----- Command processing: Name='ram' Age='23' Project='Alwa'
--INFO----- Command processing: Name='raja' Age='24' Project='Alwa'
--INFO----- Command processing: Name='shyla' Age='27' Project='Alwa'
--ERROR---- Failed to process " | ./proc.pl
дает:
Name=shayam Age=19
Name=shyla Age=27
Вы можете использовать любой входной файл или поток с этим (например):
cat file.txt | ./proc.pl
или
./proc.pl <file.txt