Как извлечь строки, которые появляются несколько раз?

Я хочу извлечь из файла все строки, запускающиеся с 'Файла': и окончание '.png'. Я выполняю команду

grep -oE 'File.*\.png' list.txt

Но это дает мне единственную длинную строку, начинающую с первого вхождения 'Файла': и окончание последним вхождением '.png'.Что мне делать?

1
задан 7 February 2020 в 04:53

2 ответа

Вы могли переключиться от режима Extended Regular Expression (ERE) до режима Perl Compatible Regular Expression (PCRE), позволив Вам использовать нежадный модификатор ?:

grep -oP 'File.*?\.png' list.txt

Посмотрите, например, Лень Вместо Жадности

1
ответ дан 20 February 2020 в 22:58

Одна длинная строка, запускающаяся с 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, сначала необходимо решить вывод, который Вы любите.

0
ответ дан 20 February 2020 в 22:58

Другие вопросы по тегам:

Похожие вопросы: