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

Я пытаюсь захватить определенный диапазон строк из текстового файла, используя 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 может предупредить о нереализованных функциях.

  • отображение PID
  • Область переменных в while-read-loop на Solaris
  • Переменные баша в команде
  • Использование eval в файле make
  • Назначить имя хоста переменной в ksh
  • Bash: Объем переменных в цикле for с использованием тройника
  • Запустите команду, сохраненную в переменной, чтобы эхо в файл
  • Установка переменной, значение которой зависит от другой переменной
  • Как назначить вывод команды переменной без запуска команды в подоболочке?
  • Присвоение нового значения непосредственно в индекс символа значения в массиве с zsh
  • Команда rm в скрипте bash не работает с переменной
  • Linux и Unix - лучшая ОС в мире.