Как использовать grep для двух разных строк

Как я могу искать две разные фразы, когда они находятся на двух разных строках, используя одну команду grep ?

Например

Строка 1: Это сладкое.

Строка 2: лимон.

Я использовал это, но никакого результата

 grep "sweet.*lemon" file_type 

Чтобы использовать grep для двух разных строк, найдите оба шаблона

 $ grep -e sweet -e lemon file_type This is a sweet lemon. 

Или используйте чередование

 $ grep -E 'sweet|lemon' file_type This is a sweet lemon. 

Чтобы получить следующую строку после шаблона, вы можете использовать параметр контекста

 $ grep -A1 sweet file_type This is a sweet lemon. 

Но если вы ищете явно для многострочного шаблона, это сложно, потому что grep думает в строках …. Ваш .* Поймает все между «сладким» и «лимоном» на линии . Мы можем получить «лимон» на следующей строке с -P используя \n чтобы соответствовать новой строке, и, указав grep файл имеет значение null, разделенное на -z :

 $ grep -zPo 'This is a sweet\nlemon' file_type This is a sweet lemon. 

Заметки:

  • -E Использовать расширенные регулярные выражения (использовать символ для чередования без необходимости его избегать)
  • -An Печать дополнительных строк после шаблона, где n – количество завершающих строк для печати
  • -P Использовать регулярные выражения в стиле perl («экспериментальный» в grep install pcregrep вместо лучшей поддержки regex perl)
  • -z Использовать нулевой символ как разделитель (просто притворяясь в этом случае, но grep возьмет наше слово за него)
  • -o распечатать только согласованную часть

Как это:

 grep "sweet\|lemon"