The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Можноли сократить..??"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Можноли сократить..??"
Сообщение от xtc emailИскать по авторуВ закладки on 16-Дек-03, 01:00  (MSK)
мне нужно все пробелы подряд заменить на 1 пробел

типа:
1071360152.546    219 192.168.0.141 TCP_MISS/304 95 GET http://linux.perm.ru/projects/sams/img/1.jpg - DEFAULT_PARENT/212.192.101.11 -
на:
1071360152.546 219 192.168.0.141 TCP_MISS/304 95 GET http://linux.perm.ru/projects/sams/img/1.jpg - DEFAULT_PARENT/212.192.101.11 -

Пробовал всякое разное, :) первое что придумал вот :))

$line =~ s/(\s\s\s\s\s\s)|(\s\s\s\s\s)|(\s\s\s\s)|(\s\s\s)|(\s\s)|(\s)/ /g;

Можно ли это сократить? я просто не мог понять как сделать чтоб сразу несколько на один, кроме этого :(((((


Если можно, помагите.

Заранее очень благодарен.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Можноли сократить..??"
Сообщение от XMan Искать по авторуВ закладки on 16-Дек-03, 01:21  (MSK)
Лаба что ли ? У меня товарищ недавно тоже перл проходил в универе. Говорит, там народ приносил километры бумаги, на которых было решение задания, типа такого:

Найти в тексте все строки, в которых третье слово содержит 3 буквы n подряд или больше чем 5 букв m в произвольном порядке, и вывести эти строки.

Хотя это всё укладывается в одно одну строку условия. Судя по всему, твоё решение из той же оперы :)

---

$line =~ s/\s+/ /g;

Можно более правильно, но менее красиво:

$line =~ s/\s{2,}/ /g;

PS. И не забывай делать chomp($line) перед обработкой, а то ведь перенос - это тоже пробельный символ. Или замени \s на пробел, если уверен, что табуляции нигде в строке нету :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Можноли сократить..??"
Сообщение от xtc emailИскать по авторуВ закладки on 16-Дек-03, 01:35  (MSK)
>$line =~ s/\s+/ /g;

Вроде пробовал так, щас еще проверю


>Можно более правильно, но менее красиво:
>
>$line =~ s/\s{2,}/ /g;
>
>PS. И не забывай делать chomp($line) перед обработкой, а то ведь перенос
>- это тоже пробельный символ. Или замени \s на пробел, если
>уверен, что табуляции нигде в строке нету :)

Пишу прогу для обработки логов сквида в реальном времени..... Ж)))

А вот такую херь плохо кушаю :))
Щас еще раз проверю $line =~ s/\s+/ /g; Ну помойму делал так.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Можноли сократить..??"
Сообщение от xtc emailИскать по авторуВ закладки on 16-Дек-03, 01:38  (MSK)
>$line =~ s/\s+/ /g;

Сработало :)) Я заместо плюса ставил * Ж)) и плюс ставил спереди :))

>Можно более правильно, но менее красиво:
>
>$line =~ s/\s{2,}/ /g;

Спасиб..  просто уже так давно сижу, разбирался с File::Tail :))

И я в общем говоря всегда плохо понимал все Эти замены :)) не всегда они мне надобились. :)

Спасиб еще раз.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Можноли сократить..??"
Сообщение от xtc emailИскать по авторуВ закладки on 16-Дек-03, 01:43  (MSK)
>
>$line =~ s/\s{2,}/ /g;

а можно расшифровать Это?? что к чему 2 и запятая?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Можноли сократить..??"
Сообщение от OldOwl Искать по авторуВ закладки on 16-Дек-03, 10:48  (MSK)
>>$line =~ s/\s{2,}/ /g;
>
>а можно расшифровать Это?? что к чему 2 и запятая?

{2,} - "2 и более".
Можно юзать по-разному:
{N} - ровно N
{N,M} - от N до M
и т.д.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Можноли сократить..??"
Сообщение от xtc emailИскать по авторуВ закладки on 16-Дек-03, 16:12  (MSK)
>>>$line =~ s/\s{2,}/ /g;
>>
>>а можно расшифровать Это?? что к чему 2 и запятая?
>
>{2,} - "2 и более".
>Можно юзать по-разному:
>{N} - ровно N
>{N,M} - от N до M
>и т.д.

Спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Можноли сократить..??"
Сообщение от XMan Искать по авторуВ закладки on 16-Дек-03, 23:28  (MSK)
Может я чего не понял, но для разбора лога сквида проще пользовать split :

@ar=split(/\s+/,$line);

А еще лучше делать примерно так:

while (<>) {
  ($time,...........)=split(/\s+/);
  # обработка полученных значений
};

:)

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру