Страница 1 из 1
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 работает, но мне не подходит, минусы есть в тех строках, которые мне не нужны.
Re: grep '\->' в Windows
Добавлено: 29 апр 2010, 09:32
Mavka
Re: grep '\->' в Windows
Добавлено: 29 апр 2010, 16:53
Максим Дубинин
работает, спасибо!
Re: grep '\->' в Windows
Добавлено: 02 авг 2011, 23:01
Boris
А может кто знает как заставить не всю строку показать, а только искомую подстроку, которая соответствует шаблону? В одном платном GREP для неизвестной системы я нашел такую опцию.
Re: grep '\->' в Windows
Добавлено: 03 авг 2011, 09:07
ericsson
Для windows самый продвинутый grep - это PowerGREP, платный, конечно.. Но "творит чудеса".
Re: grep '\->' в Windows
Добавлено: 04 авг 2011, 12:51
Boris
Про Grep не скажу, что бы их изучить и сравнить нужна жизнь...
Но в Windows встроен очень-очень неплохой анализатор текстов по шаблону, только спрятан он в системный класс RegExp. Всего делов то оказалось написать 3 строчки на VBS, что бы в это класс файл и шаблон засунуть, его результат на консоль выдать.
Было бы время (и желание) можно было бы и все параметры GREP повторить.
Re: grep '\->' в Windows
Добавлено: 04 авг 2011, 12:58
Mavka
Boris
А можно пример?
Re: grep '\->' в Windows
Добавлено: 04 авг 2011, 13:20
Александр Мурый
Почему бы не поставить полноценный Cygwin, если часто нужны Unix-утилиты?
Было бы время (и желание) можно было бы и все параметры GREP повторить.
Скажите, к чему лишний велосипедизм с переписыванием, если испытанный годами
grep развивается с 1973 года?
Re: grep '\->' в Windows
Добавлено: 04 авг 2011, 16:39
Boris
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
Re: grep '\->' в Windows
Добавлено: 04 авг 2011, 16:55
Boris
amuriy писал(а):
Скажите, к чему лишний велосипедизм с переписыванием, если испытанный годами grep развивается с 1973 года?
Я вроде не говорил, что есть желание его повторять. Но раз есть такое количество версий, то видимо одного - не достаточно.
И потом, мне что-то никто не ответил, как получить только искомое, кроме совета поставить платный grep.
Если в том пакете есть такая возможность, или средства языка позволяют, то так и надо было ответить - "учите матчасть. Это делается с помощью шаблона такого-то."
Я сам ответ быстро - не нашел. От того и спросил. Пока ждал ответа решил проблему по рабоче-крестьянски, и попутно выяснил, что встроенные средства по мощности равнозначны grep и его клонам. Было бы у меня времени вагон на такую короткую задачу, я бы сел и изучил sed. А по grep за 2 часа поисков я нашел только миллион копий одной и той же страницы, разукрашенной в зависимости от автора, различными не существенными деталями.
Зато стал искать "поиск по шаблону" в первой 10-ке нашел статью по книге "регулярные выражения" со ссылкой на RegExp и советом учить матчасть. Потому как встроенный findstr - бесплатному grep' у практически равноценен.
Re: grep '\->' в Windows
Добавлено: 04 авг 2011, 17:10
Александр Мурый
Boris писал(а):
по grep за 2 часа поисков я нашел только миллион копий одной и той же страницы, разукрашенной в зависимости от автора, различными не существенными деталями.
Т.к. главные детали все остались в мануале
Boris писал(а):А может кто знает как заставить не всю строку показать, а только искомую подстроку, которая соответствует шаблону
Сразу не заметил, т.к. не в новой теме было. Видимо, вам был нужен флаг "-o" (grep -o ...)
Re: grep '\->' в Windows
Добавлено: 04 авг 2011, 17:44
Boris
Ни в моем ветхозаветном grep32, ни grep от OSGeoW такого ключа нет.

Т.е правильный ответ - это grep из Cygwin?
Re: grep '\->' в Windows
Добавлено: 04 авг 2011, 21:24
Александр Мурый
Boris писал(а):Ни в моем ветхозаветном grep32, ни grep от OSGeoW такого ключа нет.

Т.е правильный ответ - это grep из Cygwin?
Лично я не знаю -- рабочей Win под рукой нет. Странно, что они так различаются... Я имел в виду GNU grep (который в линуксах стоит). В Cygwin, скорее всего, именно он.
Re: grep '\->' в Windows
Добавлено: 08 авг 2011, 09:01
ericsson
В документации по
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.
Re: grep '\->' в Windows
Добавлено: 10 авг 2011, 07:45
Boris
ericsson писал(а):В документации по grep,
Спасибо! Уже поставил и опробовал. Работает.