LINUX.ORG.RU

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

 


0

1

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

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

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



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

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

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

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

Не помню, есть ли у grep возможность многострочного поиска, но можно исопльзовать tr + grep + tr обратно.

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

Проблематично - файл очень большой. Может как-то sed или awk можно? типа этого не работает:

grep "</active>\n<inactive>"  
gmk22
() автор топика
Ответ на: комментарий от 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
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.