ДО
do_
.............. .......... .. ..........

December 2024
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

ДО [userpic]

некоторые живут в сраной рашке и ругают сраную рашку.

некоторые живут в сраной жежешке и ругают сраную жежешку.

некоторые живут в сраном тифаретнике и ругают сраный тифаретник.

некоторые пытаются уйти во внутреннюю эмиграцию

Comments

Некоторые даже пытаются сансару покинуть.

>> sed, http://codesnippets.joyent.com/tag/multiline
> Там некий дополнительный программинг, понятно, что с дополнительным программингом можно и grep заюзать.


grep сам читает только строками (кроме малоизвестных вариаций), а тут, так сказать, всё средствами sed и в пол строчки.

Ответил здесь, ибо [info]dmitri83 меня забанил за недостаточную разжёванность советов и непослушание. Написал по этому поводу сообщение (не о шаблонах в основном): типа, первый известный мне "бан".

для этого ещё sed надо знать, который, мягко говоря, наглядностью не отличается.

grep-ом как-то так(может, можно и короче):

   # С разделением на строки: 
   echo `cat $file | sed 's/_/__/g' | sed 's/$/ _ /'` | grep -o " _ \\([^_]\|__\\)*${phrase// /\\( _ \\)[[:blank:]]}\\([^_]\|__\\)* _ " | sed 's/ _ /\n/g' | 
   sed 's/__/_/g' 
   # Без разделения на строки: 
   echo `cat $file ` | grep -o ".\{0,$num\}$phrase.\{0,$num\}" 
   


Выглядит страшнее Перла (особенно выражение для grep-а)!

У меня grep не понимает (из UnxUtils или agrep) "-o" (правда, в примере по ссылке с sed я ключики тоже поменял, но для этого ключика предлагаемая из интернета замена под Окнами — sed:).

${p — опечатка.

По идее, должны быть $phr и $ase для двух слов (я не жду дополненного варианта).

А я не понял, что делает вариант "без разделения на строки"? cat же выдаёт не одной строкой всё, где же многострочный поиск?

Перла почти всё что угодно страшнее выглядит(всё-таки полноценный язык высокого уровня)

>${p — опечатка.
Да вроде, нет. Это такой parameter expansion:

${parameter/pattern/string}
The pattern is expanded to produce a pattern just as in pathname expansion. Parameter is expanded and the longest match of
pattern against its value is replaced with string. If Ipattern begins with /, all matches of pattern are replaced with string.


предполагается, что в $phrase вся фраза целиком, там может быть сколько угодно слов.

Замена происходит при применении command substitution. Впрочем, зависит от состояния переменной IFS, она должна быть установлена в $'\n'(что вроде, по дефолту)

Да вроде, нет. Это такой parameter expansion:
Хорошо, что я уточнил, значит.

А это, кстати, тормозит, или как-то оптимизируется и время приблизительно пропорционально размеру просматриваемого текста, если текст большой?

Да вроде бы, данный регексп мало чем отличается от поиска фиксированной строки, так что если в грепе алгоритм не совсем уж идиотский, должно быть пропорционально размеру текста.

так что если в грепе алгоритм не совсем уж идиотский
Алгоритмы-то обычно идиотские, судя по известным мне тестам (и в Яве, и на .Net, например).

должно быть пропорционально размеру текста
Это немного спорно. Реальные алгоритмы скорее всего почти всегда корявы, и по памяти (если ДКА), и по быстродействию (неправильные реализации НКА). То есть, по-моему, http://laurikari.net/tre/ такое кажется чуть ли не чудом.

А, плевать. Произвольный тест тоже скорее всего не выявит патологию, даже если есть.

Я предположил (без оснований, кроме его ограниченной сугубо строчечной натуры), что grep может быть плохо рассчитан на длинные строчки и всё такое, что в нём тормоза будут.

Но вообще, vim идеальный вариант:

/ГНОЙ\_sСАЛО