захватить из текстового файла диапазон с использованием двух переменных в качестве начального и конечного параметров

Я пытаюсь захватить определенный диапазон строк из текстового файла, используя grep; диапазон строк должен быть идентифицирован двумя переменными. до сих пор я пытался это сделать с помощью подстановочных символов * * Примеры неудачных попыток включают: (я вижу, почему первые два не должны работать, но отчаялись и надеялись на чудо)

grep "$Var1"*"$Var2" file.txt grep "$Var1*$Var2" file.txt echo "$Var1*$Var2" | grep file.txt 

Я начинаю думать, что приближаюсь к этому совершенно неправильно, поэтому не стесняйтесь предлагать альтернативы grep.

One Solution collect form web for “захватить из текстового файла диапазон с использованием двух переменных в качестве начального и конечного параметров”

grep не предназначен для поиска шаблонов по нескольким линиям. Есть и другие инструменты, которые лучше подходят для этой задачи: awk и sed .

Поскольку вы используете переменные для хранения шаблонов, все может стать сложным. Сначала попробуйте жестко закодированные шаблоны. Если вы получили это право, попробуйте заменить жестко закодированные паттерны на переменные.


Использование awk :

 awk '/'"$Var1"'/,/'"$Var2"'/' file.txt 

Та же команда с жестко закодированными шаблонами для объяснения концепции:

 awk '/pattern1/,/pattern2/' file.txt 

Объяснение:

  • /pattern1/,/pattern2/ – это диапазон. диапазон начинается с pattern2 соответствия pattern2 и заканчивается на pattern2 сопоставления pattern2 .
  • по умолчанию awk только печатает строки, находящиеся в диапазоне.

Подробнее об awk : http://www.catonmat.net/blog/awk-one-liners-explained-part-one/


Использование sed :

 sed -n '/'"$Var1"'/,/'"$Var2"'/ p' file.txt 

Та же команда с жестко закодированными шаблонами для объяснения концепции:

 sed -n '/pattern1/,/pattern2/ p' file.txt 

Объяснение:

  • -n делает sed для печати строк, только если сказано.
  • /pattern1/,/pattern2/ – это диапазон. диапазон начинается с pattern2 соответствия pattern2 и заканчивается на pattern2 сопоставления pattern2 . для каждой строки в этом диапазоне выполняются следующие команды.
  • p в конце говорит sed печатать строки.

Узнайте больше о sed : http://www.catonmat.net/blog/sed-one-liners-explained-part-one/


Если вам действительно нужно использовать grep вы можете использовать -P чтобы сообщить grep использовать механизм регулярных выражений perl. На странице руководства это говорит об этой функции:

Интерпретируйте шаблон как совместимое с Perl регулярное выражение (PCRE). Это очень экспериментально, и grep -P может предупредить о нереализованных функциях.

  • шаблон awk с переменной в скрипте bash
  • Переменная в команде find задана новой переменной в bash
  • Как сохранить статус последнего выхода после теста
  • Использование find с двумя наборами переменных
  • bash - определяющие переменные с VAR = $ {: - по умолчанию}
  • Как добавить текст в переменную в make-файле?
  • Как назначить вывод команды переменной без запуска команды в подоболочке?
  • как получить или отразить имя вызываемой функции bash?
  • Объединение нескольких выходов grep в переменную
  • Используйте sed для извлечения переменной из 1 файла и поместите ее в другую
  • Удалить определенное слово в переменной
  • Linux и Unix - лучшая ОС в мире.