Linux: Как я могу grep текст из строки в строку - PullRequest
1 голос
/ 13 марта 2012

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

например:

<--string 1-->
the text i need
<--string 2-->

«текст, который мне нужен» между двумя тегами, является динамическим, поэтому мне нужна команда, которая будет выводить текст из «<- string 1 ->» в «<- string 2 ->»

Ответы [ 5 ]

1 голос
/ 11 сентября 2014

нам нужно знать, что такое номер строки для string1 и string2, мы можем использовать grep -n для этого, затем, используя head и tail, мы можем получить строки между string1 и string2, например:

<--string 1-->
the text i need
<--string 2-->


start=$(cat file | grep -n <--string 1--> | grep -Eo [0-9]+)
finish=$cat file | grep -n <--string 2-->) | grep -Eo [0-9]+)
res=$((finish-start))
result=$(cat file | head -$start | tail -$res)

Itнемного хакерский, но у меня это сработало.

1 голос
/ 13 марта 2012

если вы знаете, что «нужный мне текст» всегда выше или всегда ниже строки 1 или строки 2, вы можете использовать grep -A 1 "string 1" $file | tail -1 или grep -B 1 "string 2" $file | head -1

0 голосов
/ 13 марта 2012

Это может работать для вас:

grep -A2 "<--string 1-->" file | grep -v "<--string 1-->\|<--string 2-->"

или

grep -A1 "<--string 1-->" file | grep -v "<--string 1-->"

или в одном процессе:

sed '/<--string 1-->/,/<--string 2-->/!d;//d' file

или:

awk '/<--string 2-->/{p=0};p;/<--string 1-->/{p=1}' file
0 голосов
/ 13 марта 2012

Предположим, что "текст, который мне нужен" - это всего лишь одна строка, вы должны проверить, что появляются и строки1, и строки2 (решение Алекса проверяет только одну вещь).

Лучшее решение будет:

grep -A 2 "string 1" $file | tail -2 | grep -B 1 "string 2" | head -1
0 голосов
/ 13 марта 2012
grep word filename

Проверьте grep в вики .. http://en.wikipedia.org/wiki/Grep

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...