grep '\->' в Windows

Все остальное, мало относящееся к ГИС.
Ответить
Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

grep '\->' в Windows

Сообщение Максим Дубинин » 29 апр 2010, 06:30

Не уверен, что кроме меня таким извращением кто-то занимается, но спрошу.

Мне нравится grep, но использовать я его могу по некоторым причинам только в Windows и использую для этого среду OSGeo4W, где есть и он и sed и многое другое.

Вопрос:
Есть текстовый файл log примерно такого содержания:

Код: Выделить всё

str-ing
strin-g
string1 -> string2
strin1 -> string3
stri-ng
string
Я хочу выбрать в новый файл только строки где есть ->, но как не пробую экранировать - и > ничего не получается.

Пробовал:

Код: Выделить всё

grep '->' log
grep '\-\>' log
grep '\->' log
grep -- '\->' log
Не получается, выбрать просто grep '-' log работает, но мне не подходит, минусы есть в тех строках, которые мне не нужны.
пристегивайтесь, турбулентность прямо по курсу

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: grep '\->' в Windows

Сообщение Mavka » 29 апр 2010, 09:32

Код: Выделить всё

grep "\-[\\>]" ./test.txt
лангольеры под окном жрали время ом-ном-ном

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: grep '\->' в Windows

Сообщение Максим Дубинин » 29 апр 2010, 16:53

работает, спасибо!
пристегивайтесь, турбулентность прямо по курсу

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: grep '\->' в Windows

Сообщение Boris » 02 авг 2011, 23:01

А может кто знает как заставить не всю строку показать, а только искомую подстроку, которая соответствует шаблону? В одном платном GREP для неизвестной системы я нашел такую опцию.

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: grep '\->' в Windows

Сообщение ericsson » 03 авг 2011, 09:07

Для windows самый продвинутый grep - это PowerGREP, платный, конечно.. Но "творит чудеса".

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: grep '\->' в Windows

Сообщение Boris » 04 авг 2011, 12:51

Про Grep не скажу, что бы их изучить и сравнить нужна жизнь...
Но в Windows встроен очень-очень неплохой анализатор текстов по шаблону, только спрятан он в системный класс RegExp. Всего делов то оказалось написать 3 строчки на VBS, что бы в это класс файл и шаблон засунуть, его результат на консоль выдать.
Было бы время (и желание) можно было бы и все параметры GREP повторить.

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: grep '\->' в Windows

Сообщение Mavka » 04 авг 2011, 12:58

Boris
А можно пример?
лангольеры под окном жрали время ом-ном-ном

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: grep '\->' в Windows

Сообщение Александр Мурый » 04 авг 2011, 13:20

Почему бы не поставить полноценный Cygwin, если часто нужны Unix-утилиты?
Было бы время (и желание) можно было бы и все параметры GREP повторить.
Скажите, к чему лишний велосипедизм с переписыванием, если испытанный годами grep развивается с 1973 года?
Редактор материалов, модератор форума

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: grep '\->' в Windows

Сообщение Boris » 04 авг 2011, 16:39

Mavka писал(а):Boris
А можно пример?
пример чего? микрософтовского языка выражений или скрипта?
Если скрипта, то вот:

Код: Выделить всё


dim i,j,k,L,M,N
dim t,v,s
dim fso,txtIn, txtOut, regStr
Const ForReading = 1

Dim WshShell : Set WshShell = WScript.CreateObject("WScript.Shell")
 
	Dim oArgs : Set oArgs = Wscript.Arguments
	if oArgs.count > 2 or oArgs.count < 1 then
		showHelp
	    wscript.quit(-99999)
	end if
	N=0
	regStr=oArgs(0)
	Set fso = CreateObject("Scripting.FileSystemObject")
	set txt = fso.OpenTextFile(oArgs(1), ForReading)
Dim oRe, oMatch, oMatches
	Set oRe = New RegExp
	oRe.Pattern = regStr
	oRe.Global = True   ' Set global applicability.
	oRe.IgnoreCase = True   ' Set case insensitivity.

	do while txt.AtEndOfStream <> True
		t=txt.ReadLine
		' Get the Matches collection
		Set oMatches = oRe.Execute(t)
		' Get the items in the Matches collection
		For Each oMatch in oMatches   
		' Create the results string.
			s = oMatch.Value
			WScript.Echo s
		next
	loop
	txt.close

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: grep '\->' в Windows

Сообщение Boris » 04 авг 2011, 16:55

amuriy писал(а): Скажите, к чему лишний велосипедизм с переписыванием, если испытанный годами grep развивается с 1973 года?
Я вроде не говорил, что есть желание его повторять. Но раз есть такое количество версий, то видимо одного - не достаточно.
И потом, мне что-то никто не ответил, как получить только искомое, кроме совета поставить платный grep.
Если в том пакете есть такая возможность, или средства языка позволяют, то так и надо было ответить - "учите матчасть. Это делается с помощью шаблона такого-то."
Я сам ответ быстро - не нашел. От того и спросил. Пока ждал ответа решил проблему по рабоче-крестьянски, и попутно выяснил, что встроенные средства по мощности равнозначны grep и его клонам. Было бы у меня времени вагон на такую короткую задачу, я бы сел и изучил sed. А по grep за 2 часа поисков я нашел только миллион копий одной и той же страницы, разукрашенной в зависимости от автора, различными не существенными деталями.
Зато стал искать "поиск по шаблону" в первой 10-ке нашел статью по книге "регулярные выражения" со ссылкой на RegExp и советом учить матчасть. Потому как встроенный findstr - бесплатному grep' у практически равноценен.

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: grep '\->' в Windows

Сообщение Александр Мурый » 04 авг 2011, 17:10

Boris писал(а): по grep за 2 часа поисков я нашел только миллион копий одной и той же страницы, разукрашенной в зависимости от автора, различными не существенными деталями.
Т.к. главные детали все остались в мануале :twisted:
Boris писал(а):А может кто знает как заставить не всю строку показать, а только искомую подстроку, которая соответствует шаблону
Сразу не заметил, т.к. не в новой теме было. Видимо, вам был нужен флаг "-o" (grep -o ...)
Редактор материалов, модератор форума

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: grep '\->' в Windows

Сообщение Boris » 04 авг 2011, 17:44

Ни в моем ветхозаветном grep32, ни grep от OSGeoW такого ключа нет. :(
Т.е правильный ответ - это grep из Cygwin?

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: grep '\->' в Windows

Сообщение Александр Мурый » 04 авг 2011, 21:24

Boris писал(а):Ни в моем ветхозаветном grep32, ни grep от OSGeoW такого ключа нет. :(
Т.е правильный ответ - это grep из Cygwin?
Лично я не знаю -- рабочей Win под рукой нет. Странно, что они так различаются... Я имел в виду GNU grep (который в линуксах стоит). В Cygwin, скорее всего, именно он.
Редактор материалов, модератор форума

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: grep '\->' в Windows

Сообщение ericsson » 08 авг 2011, 09:01

В документации по grep, входящему в GNUWin32 ( http://gnuwin32.sourceforge.net/packages.html ) значится:

-o
--only-matching
Print only the matched (non-empty) parts of matching lines, with each such part on a separate output line.

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: grep '\->' в Windows

Сообщение Boris » 10 авг 2011, 07:45

ericsson писал(а):В документации по grep,
Спасибо! Уже поставил и опробовал. Работает.

Ответить

Вернуться в «Все остальное»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя