LINUX.ORG.RU

Как с помощью grep и (например) sed вырезать куски текста «вокруг строки» в текстовом файле?

 , ,


0

1

В текстовом файле необходимо найти число, пускай это будет 137. С этим понятно:

egrep [^0-9]137[^0-9] log.log > log1.log

Итак, число 137 нашлось и находится оно в тегах <tag>137</tag>.

Но я хочу выгрести всю транзакцию <transaction></transaction>, в которой находится этот <tag>147</tag>.

Есть ли какое-нибудь элегантное решение?

Если в одной строке, то изи бротишко

egrep -o "<transaction>.*<tag>137</tag>.*</transaction>"

anonymous
()
Ответ на: комментарий от anonymous

Если б было в одну, то я б и не спрашивал

А проблема в том, что строк много и их количество в каждой транзакции - разное

Mamin_simpotyaga
() автор топика
Ответ на: комментарий от Mamin_simpotyaga

ну, телепаты же в отпуске. ты еще более абстрактно задачу ставь ;)

aol ★★★★★
()
grep what -A 2 -B 2 file

выведет матчащиеся строки с окружением в две строки. Потом, конечно, полученные сниппеты нужно будет обработать

anymouse
()
Ответ на: комментарий от anymouse

Но более правильно написать выгрызатор фрагментов XML на Python/whatever по стартовому/финишному корневому тегу фрагмента, а полученный фрагмент парсить уже при помощи XML-парсера, например, lxml

anymouse
()

Если у вас тег «<transaction>» целиком в одной строке, то на sed'е это сделать можно, без всяких grep, в sed есть метки и ветвление. А если в вашем файле как-то так:

<
transaction
>

то лучше на sed это не делать.

Выложите кусок файла на pastebin, чтобы можно было проверить sed-скрипт.

На счёт элегантности sed-скриптов судить сложно, обычно ими пугают всех подряд :)

mky ★★★★★
()
Ответ на: комментарий от mky

Сперва xml2 и после него уже грепать.

Deleted
()

XPath

Есть ли какое-нибудь элегантное решение?

xpath -q -e '//transaction[./tag = "137"]' /path/to/your.txt

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

dexpl ★★★★★
()
Ответ на: комментарий от mky

Под элегантностью я понимаю самое рациональное/готовое решение :)

Mamin_simpotyaga
() автор топика

А что мешает воспользоваться чем то более адекватным поставленной задаче, например python-ом?

King_Carlo ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.