Я пишу ls
в Perl, ища строки, содержащие какие-либо символы, за которыми следует «.mp4.mp3» в конце строки. Я хочу удалить «.mp4» из середины строки. Вот моя команда:Perl regex non-greedy matching
ls | perl -pe 's|(.+?)\.mp4\.mp3$|\1\.mp3|'
Я использую нежадное согласование поэтому регулярное выражение будет прекратить потреблять линию, когда он работает в».mp4.mp3" . Я ожидал бы, что это будет работать только на линиях, которые заканчиваются на «.mp4.mp3», но он работает на строках без «.mp4» в них вообще.
Ввод: foo. bar.mp4.mp3
Ожидаемый результат: foo. bar.mp3
Есть ли какой-либо r Вы не просто заменяете '.mp4.mp3'' .mp3'? – Laurel
показать пример ввода и ожидаемого и фактического вывода – ysth
, вы всегда должны включать предупреждения даже в oneliners. это не настоящая проблема здесь, но использование \ 1 вместо $ 1 с правой стороны замены является ошибкой. – ysth