2015-02-10 2 views
0

Я пытаюсь grep слово в файле .txt внутри «<» и «>» в ​​течение двух дней, но невозможно получить его. Например, я имею что-то подобное в file.txt:Получить текст внутри «<" and ">» с grep в партии

30993250 (<[email protected]> 2014-09-22 12:41:56 +0200 365)

Родом из git blame -L 365,+1 path\to\file.cpp-e и я хочу, чтобы только восстановить электронную почту внутри. Я пытаюсь это следующий код:

grep -oP '(?<=\<)\w+(?= \>)' ..\log\file.txt > ..\log\result.txt

и

grep -Po '(?<=\().*(?=\))' ..\log\file.txt > ..\log\result.txt

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

Я хочу сказать, что я использую пакет под Windows. Есть ли кто-нибудь, кто может мне помочь?

EDIT: Я нашел решение, в котором я использую таблицу ASCII так:

grep -oP '["\074].*["\076]' ..\log\file.txt > ..\log\result.txt

Но отображения "<>" символы, как это:

<[email protected]>

Как я могу удалить это?

Благодаря

+0

Этот символ довольно близок 'grep -o '<[^>] \ +''. У вас есть awk ?, тогда вы можете использовать 'awk -F '[><]' '{print $ 2}'' –

+0

Использование sed: 'sed 's/^ [^ <]\+<\([^>] \ + \). * $/\ 1/'' –

+0

@FredrikPihl Спасибо за ответ. Я попробовал awk (gawk for me on windows ...) и sed, но он никогда не работает :(Я редактирую свой пост, потому что нашел начало решения. – Algorys

ответ

1

Grep найти и показать линии, он не будет удалить что-нибудь из линии.

Но в вашем случае вы можете прочитать результат и удалить символы <>.

grep -oP '["\074].*["\076]' ..\log\file.txt > ..\log\result.txt 
setlocal EnableDelayedExpansion 
set /p line= < ..\log\result.txt 
set "line=!line:<=!" 
set "line=!line:>=!" 
echo !line! 
+0

Да, спасибо @jeb очень хорошо работает – Algorys

+0

Grep' -o 'option выводит только соответствующий контент, а не всю строку – dbenham

+0

Хорошо, с синтаксисом thats он тоже работает:' gawk -F "[><]" '{print $ 2}' .. \ log \ file.txt> .. \ log \ result.txt', поэтому я сохраняю это, с '' ', чтобы избежать проблем со специальными символами. Всем спасибо. – Algorys

1

Режим perl -P позволяет заглянуть сзади. Примечание. Я использую GNU grep для Windows.

grep -P -o "(?<=<)[^>]+(?=>)" ..\log\file.txt >..\log\result.txt 

Для пакетных пользователей Windows, которые не имеют доступ к Grep (некоторые компании запрещают 3-й программу партии EXE), вы можете использовать мой JREPL.BAT - чистый скрипт поиска регулярных выражений/заменить утилиту, которая работает на всех Windows.

jrepl "<([^>]+)>" $1 /jmatch /f ..\log\file.txt /o ..\log\result.txt 
Смежные вопросы