![]() |
|
Модераторы: powerfox, ZeeLax |
![]()
|
|
| mihanik |
|
||||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 13 Всего: 109 |
Дано:
Есть файл, в котором иногда встречаются идущие подряд строчки
Надо: При помощи grep вывести на экран все такие-вот пары строк. Что я делаю cat имя_файла | grep "^\s*<title>.*</title>" или даже так cat имя_файла | grep "^\s*<title>.*</title>.*[\n\r]*\s*" При этом, как не сложно догадаться, на экран выводятся только строки типа
При дальнейшем усложнении выражения ничего на экран уже не выдаётся... Как заставить grep искать по шаблону во всём тексте, а не только в одной строке? Прошу помощи. |
||||
|
|||||
| Фантом |
|
||||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 10 Всего: 49 |
Такой вариант не годится?
Или, если нужна именно проверка содержимого обеих строчек, то можно так:
- возможно, не лучший способ, но наиболее простой в смысле "сведения задачи к предыдущей". |
||||
|
|||||
| mihanik |
|
|||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 13 Всего: 109 |
Фантом, думаю, что твой вариант не годиться, т.к. ты сначала ищешь все строки вида <title>, а потом в том, что нашёл, ищешь строки вида <link>
Короче, ничего не найдётся. Мне же нужно на экране получить сразу текст такого вот вида
|
|||
|
||||
| mihanik |
|
|||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 13 Всего: 109 |
пока сделал так
Создал файл с критериями поиска следующего вида
И подал команду cat имя_файла | grep -f файл_с_критериями_поиска Но это не красивое решение. Хочу красоты!!! |
|||
|
||||
| spin2 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 15.12.2005 Где: Москва-Одесса Репутация: 5 Всего: 31 |
Исходный файл:
Обработка:
Добавлено через 1 минуту и 5 секунд Можно потом обратно переводы строк вставить, если нужно... -------------------- |
||||
|
|||||
| bilbobagginz |
|
||||||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 113 Всего: 317 |
все очень просто:
во первых, лучше делать так:
(т.к. можно дать параметр -n номер строки, и т.д.) я не понял что надо вывести. Если надо вывести все строки, где присутствует корректный тэг title и link, то:
а если надо, чтобы вышли только те ссылки, которые после title, то так:
последний элемент конвеера - опциональный, скидка остатков с пустых строк если может быть '--' в title/link, то пользоваться им не стоит. какие-то гнусные примеры из серии "решите за меня задачку". "в реале" все это на ура решается на python/ruby/perl с помощью либы для парсинга XML. -------------------- Я ещё не демон. Я только учусь. |
||||||
|
|||||||
| mihanik |
|
|||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 13 Всего: 109 |
spin2
гм... А т.к. строка может начинаться с некоторого "пустого места", то команда будет такая cat исходный_файл | sed 'H;${x;s/<\/title>\n/<\/title>/g}' | grep '</title>\s*<link>' Добавлено через 12 минут и 50 секунд Нужно вывести все упорядоченные пары строк. Попробую описать так (с некоторыми неточностями, но, в общем, понятно) <наполнение>:== <символ_алфавита> | <наполнение><символ_алфавита> <конец_строки>:== \n <titlestring>:==<<title><наполнение></title>> <linkstring>:==<<link><наполнение></link>> <упорядоченная_пара_строк>:==<titlestring><конец_строки><linkstring> Это сообщение отредактировал(а) mihanik - 8.2.2011, 21:52 |
|||
|
||||
| mihanik |
|
|||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 13 Всего: 109 |
||||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 10 Всего: 49 |
А попробовать запустить то, что я предлагал, ты не пытался? Попытайся, результат тебя удивит. Ну а потом на досуге почитай man grep в части, касающейся описания действия ключей -A и -B. |
|||
|
||||
| mihanik |
|
||||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 13 Всего: 109 |
Гм... Я сначала не понял твоей логики, а теперь понял... Только вот одно но... Строчки выводятся парами, как того и требует левый палец на моей правой ноге, но между парами строк выводится "--" А этого мой левый палец не хочет.
убрать бы... Вот так...
Красиво, изящно, хорошо. Всем спасибо. Это сообщение отредактировал(а) mihanik - 9.2.2011, 08:54 |
||||
|
|||||
![]()
|
| Правила форума "Linux/UNIX: Oбщие вопросы" | |
|
|
В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу). В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим. Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |