На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
nick87720z
Сообщения: 180
ОС: Gentoo / Calculate
Сообщение
nick87720z » 21.03.2010 23:53
Пробовал в консоли:
В результате чего получаю список отдельных строк, как если бы использовал grep отдельно для каждой строки. Нельзя ли сделать это одной командой? А то приходится еще номера отдирать и проверять их подряд...
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Сообщение
sash-kan » 22.03.2010 00:00
grep работает с каждой строкой отдельно.
что именно вы хотите получить в самом итоге?
nick87720z
Сообщения: 180
ОС: Gentoo / Calculate
Сообщение
nick87720z » 22.03.2010 01:35
Код: Выделить всё
$echo -e "hello\nworld\nhello\nworld\nbye" > ./test
$grep -e "world
hello" ./test
1:hello
2:world
3:hello
4:world
Необходимо найти не отдельные строки, как здесь, а их последовательность `echo -e "world\nhello"`, которая в данном случае только одна.
Может это делается и не через grep?
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник
Сообщение
Nazyvaemykh » 22.03.2010 01:45
могу предложить примерно такой вариант с
sed , возможно, он работает не совсем правильно…
Код: Выделить всё
#!/bin/sed -nf
/stroke1/{
:a;
n;
/stroke2/ {
n;
/stroke3/ {
s/^/stroke1\nstroke2\n/;p;
};
/stroke1/ ba;
};
/stroke1/ ba;
};
¡ Страсть к разрушению есть творческая страсть !
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник
Сообщение
Nazyvaemykh » 22.03.2010 02:18
Исправил, вроде, стало более кавайно:
Код: Выделить всё
#!/bin/sed -nf
/stroke1/{
:a;
h;n;
/stroke2/ {
H;n;
/stroke3/ {
H;g;p;
};
/stroke1/ ba;
};
/stroke1/ ba;
};
¡ Страсть к разрушению есть творческая страсть !
nick87720z
Сообщения: 180
ОС: Gentoo / Calculate
Сообщение
nick87720z » 22.03.2010 14:19
Почти то, только мне нужен номер первой строки.
Пробовал ставить '=;' после 'h', из за чего он выдавал лишние номера строк, хотя сами строки в том же количестве.
nick87720z
Сообщения: 180
ОС: Gentoo / Calculate
Сообщение
nick87720z » 22.03.2010 16:04
Сделал, проверил, работает
Код: Выделить всё
/hello/{ :a
=;n;
/world/ { n
/people man/ q0
/hello/ ba
}; /hello/ ba
}
Осталось придумать генератор этого скрипта
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Сообщение
sash-kan » 22.03.2010 16:13
nick87720z писал(а): ↑ 22.03.2010 01:35
Может это делается и не через grep?
не то чтобы совсем «не через grep». через немножко иную реализацию, sgrep, гораздо удобнее находить паттерны, разнесённые по нескольким строкам.
nick87720z
Сообщения: 180
ОС: Gentoo / Calculate
Сообщение
nick87720z » 22.03.2010 22:33
Код: Выделить всё
cat ./test2 | sgrep -o "%s\n" '"stroke1\nstroke2"'
Супер! Всем спасибо.