LINUX.ORG.RU

grep двух последовательных строк

 


0

1

Есть две последовательных строки в файле, например:

<active>no</active>
<inactive>yes</inactive>

Надо выбрать именно те, которые идут последовательно (как в примере), т.к. есть в тесте еще такие же



Последнее исправление: gmk22 (всего исправлений: 1)

А в чем вопрос?

Если строки идут одна за другой в известном порядке то можно написать регулярное выражение. Если в неизвестном порядке, то можно сделать или 2 грепа или написать более сложную регулярку.

vitruss ★★★★★
()
Последнее исправление: vitruss (всего исправлений: 1)
Ответ на: комментарий от papin-aziat

Есть доля правды, но сам вопрос не аксиома )) Нужны варианты О’кей гугл не помогает

gmk22
() автор топика
Ответ на: комментарий от gmk22

Так порядок известен? Если да, то -a должно помочь и потом ещё один греп результатов с -b чтобы увидеть только совпадения.

vitruss ★★★★★
()
Ответ на: комментарий от vitruss

2 грепа не получается, т.к. если выбрать только первую строку или только вторую в результате выкатится куча одинаковых. Не получается выбрать сразу эти две строки

gmk22
() автор топика
Ответ на: комментарий от gmk22

Два последовательных грепа, первый ищет в файле, второй в результате первого. Пользуясь -C, -a и -b модно выводить окружения совпадения.

vitruss ★★★★★
()
Последнее исправление: vitruss (всего исправлений: 1)
Ответ на: комментарий от gmk22

А если так:

cat file.txt | grep -A1 '<active>' | grep -B1 '<inactive>'

Если, правда, в строке попадут оба паттерна, то выйдет чепуха)

stabilitron
()
<active>no</active>
<inactive>yes</inactive>

Надо выбрать именно те, которые идут последовательно (как в примере),

Попробуй

grep -A 1 '<active>' файл | grep -B 1 '<inactive>' 
x22 ★★★
()
Ответ на: комментарий от x22

сделал костыль: выше этих строк всегда записывается одна и та же строка, например: «no active» и сделал

grep -A10 "no active" ~/1.txt 

и эти строки появились в выборке. Всем спасибо!

gmk22
() автор топика
Ответ на: комментарий от dmitry237

А, уже ответили, только никто не отреагировал.

Спасибо за тред и комментарий, я про -z не знал раньше.

anonymous
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария