Как скрипт perl:
$filename=$ARGV[0];
if (open(my $fh, '<:encoding(UTF-8)', $filename)) {
while (my $match = <$fh>) {
while ($match =~ /((\(.*?[^)]\))|(".*?"))/g) {
print "$1 ";
}
print "\n"
}
}
Или как perl однострочный:
perl -ne 'while (/((\(.*?[^)]\))|(".*?"))/g) {print "$1 ";} print "\n"' file
Выход
"foo foo" (bar bar) (19)
"foo foo"
[ ! d4] Это была оригинальная задача:
Вход: «foo» (bar) (19) raboof «foo» raboof Ожидаемый результат: «foo» (bar ) (19) «foo»Используя perl:
perl -pe '@elements=( split (/\s/) );
for $element (@elements) {
if ($element!~/^"|\(/ and $element!~/"|\($/) {
s/$element//
}
s/^\s+//;
s/\s+$/\n/
};' file
или как однострочный:
perl -pe '@elements=( split (/\s/) ); for $element (@elements) { if ($element!~/^"|\(/ and $element!~/"|\($/) { s/$element// } s/^\s+//; s/\s+$/\n/ };' file
Выход [ ! d3]
"foo" (bar) (19)
"foo"