Я хочу извлечь из файла все строки, запускающиеся с 'Файла': и окончание '.png'. Я выполняю команду
grep -oE 'File.*\.png' list.txt
Но это дает мне единственную длинную строку, начинающую с первого вхождения 'Файла': и окончание последним вхождением '.png'.Что мне делать?
Вы могли переключиться от режима Extended Regular Expression (ERE) до режима Perl Compatible Regular Expression (PCRE), позволив Вам использовать нежадный модификатор ?
:
grep -oP 'File.*?\.png' list.txt
Посмотрите, например, Лень Вместо Жадности
Одна длинная строка, запускающаяся с File:
и окончание .png
кажется, то, что Вы просите.
Когда Вы захотите этого разделения в строки без пробелов, попробуйте что-то как
grep -oE 'File:[^s]*\.png' list.txt
Когда строки имеют пробелы, но только точку прежде png
, попробовать
grep -oE 'File:[^.]*\.png' list.txt
Когда Вы не хотите использовать Perl нежадный grep, с Вами можно было бы помочь
sed 's/\.png/&\n/g' list.txt | grep -oE 'File:.*\.png'
Когда Ваш вход имеет двойной starttags как File: and again File: before .png
, сначала необходимо решить вывод, который Вы любите.