У меня есть этот сложный регулярное выражениеPerl Oneliner в Баш: печать совпадает со сложным регулярным выражением
/"_outV":([0-9]+),"_inV":([0-9]+),"_label":"([a-z\/]+)",/
и мне нужно, чтобы разобрать файл (который все на одной линии), и выход только совпавшие группы, такие как
print $1 $2 $3
в настоящее время единственным почти работает Onliner является
perl -pe 'while(m/"_outV":([0-9]+)\,"_inV":([0-9]+)\,"_label":"([a-z\/]+)\"\,/g){print "$1 $2 $3\n";}'
Но это заканчивается тем же, что и весь файл в конце, после матчей. Как это исправить?
Я считаю, что удаление опции -p
сделало бы трюк, но это не так.
Некоторые примеры данных поможет. Это похоже на то, что у вас есть что-то разобрать, и вы пытаетесь повторно использовать его, что, вероятно, является неправильным способом решения проблемы. – Sobrique
Я начал писать ответ, но я должен идти сейчас. Мое намерение состояло в том, чтобы сказать, что вы не должны стремиться к однострочной программе на любом языке. Два уровня ускорения делают все ужасно трудным для отладки. Если у вас нет веских оснований для необходимости использовать однострочную команду, и я не могу придумать ее, она будет лучше написана в виде Perl-программы в отдельном файле. Все, что находится за пределами тривиального шаблона регулярного выражения, должно использовать варианты изменения разделителя и использования модификатора '/ x'. Комплексные однострочные для молодых программистов, которые любят играть «трюки»; они не предназначены для профессионального использования, – Borodin
@Borodin Это сложно. – 123