Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / shell - убрать одинаковые символы в строке. / 25 сообщений из 36, страница 1 из 2
08.09.2005, 17:50:47
    #33259614
lissyara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
Есть строка - *###PP##
Количество решёток, звёздочек, букв P может варьироваться от 1 до 3-х. Как
бы это хозяйство упорядочить, чтобы на выходе получить *#P# (это из той же
задачки где с компорта данные, это такое регулярное выражение чтоб поймать
звонок по IP-телефонии). Что-то у меня идей совсем нет... А запускать перл
для этого - совсем не хочется :(
Хочется на shеll - от начала и до конца.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
08.09.2005, 18:02:58
    #33259645
DocAl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
Т.е. нужно склеить повторяющиеся символы в один?
...
Рейтинг: 0 / 0
08.09.2005, 19:17:12
    #33259792
lissyara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
ага
...
Рейтинг: 0 / 0
08.09.2005, 19:37:18
    #33259816
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
привет! Суперизврат! :-)

echo "###P#ZZZf" | awk '{for(i=1;i<=length($1);i++)print substr($1,i,1)}' | uniq | awk '{main=main "" $1}END {print main}'
...
Рейтинг: 0 / 0
08.09.2005, 22:01:16
    #33259925
Alex Roudnev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
--null--привет! Суперизврат! :-)

echo "###P#ZZZf" | awk '{for(i=1;i<=length($1);i++)print substr($1,i,1)}' | uniq | awk '{main=main "" $1}END {print main}'

Ну если вы точно знаете, что повторяются ТОЛЬКО # и P, то не проще ли

sed 's/PP*/P/g;s/##*/#/g'

??
...
Рейтинг: 0 / 0
08.09.2005, 22:41:51
    #33259960
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
да, конечно - и это гораздо эффективнее , но мне просто было интересно рассмотреть общий случай исходя из топика. Если набор символов четко известен то sed конечно.
...
Рейтинг: 0 / 0
08.09.2005, 23:16:27
    #33259979
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
Сорри, мой первый вариант позорен и неуклюж.
Вот удаление всех повторений


Код: plaintext
echo "###P#ZZZf"  | sed s/\(.\)\ 1 */\ 1 /g
...
Рейтинг: 0 / 0
08.09.2005, 23:21:43
    #33259983
lissyara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
Остановился на такой конструкции
Код: plaintext
1.
/dev/>echo "**###PPP#######" | sed 's/PP*/P/g;s/##*/#/g;s/\*\**/\*/g'       
*#P#
Хотя на awk мне больше понравилось. И кстати, действительно, универсальней - если повторяются не только одни и теже символы....
...
Рейтинг: 0 / 0
08.09.2005, 23:22:48
    #33259985
lissyara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
Код: plaintext
1.
2.
/dev/>echo "**###PPP#######" | sed s/\(.\)\ 1 */\ 1 /g
sed: No match.
/dev/>
А первый работал.
...
Рейтинг: 0 / 0
08.09.2005, 23:25:56
    #33259987
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
ой а у меня работает.

Код: plaintext
1.
2.
echo "**###PPP#######" | sed s/\(.\)\ 1 */\ 1 /g

"*#P#"


версия sed что ли или что-то такое?

Код: plaintext
1.
sed --v
GNU sed version  3 . 02 
...
Рейтинг: 0 / 0
08.09.2005, 23:31:57
    #33259991
DocAl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
Наверное)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
# sed -v
sed: illegal option -- v
usage: sed script [-Ean] [-i extension] [file ...]
       sed [-an] [-i extension] [-e script] ... [-f script_file] ... [file ...]
You have new mail.
# sed --v
ждёт чего-то
...
Рейтинг: 0 / 0
08.09.2005, 23:32:10
    #33259992
lissyara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
немогу добиться версии :( Он переходит в интерактивный режим, чтоли и по sed --ver и по sed --v и ни на что не реагирует кроме CTRL-C.....

На 4.9 и на 4.11 фре пробовал... Одно и тоже...
...
Рейтинг: 0 / 0
08.09.2005, 23:34:54
    #33259995
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
некоторые старенькие (sedенькие :-)) sed-ы кстати в такой ситуации хотят чтобы их защитили - что-то типа

Код: plaintext
1.
2.
3.
4.
echo "**###PPP#######" | sed "s/\(.\)\1*/\1/g"

или даже

echo "**###PPP#######" | sed -e "s/\(.\)\1*/\1/g"
...
Рейтинг: 0 / 0
08.09.2005, 23:39:23
    #33260001
DocAl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
Да, так
Код: plaintext
echo "**###PPP#######" | sed 's/\(.\)\1*/\1/g'
на фре работает. Они не седенькие, они традиционные)
...
Рейтинг: 0 / 0
08.09.2005, 23:48:52
    #33260005
lissyara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
Я, кстати, всё равно при своём варианте остаюсь :) Там я хоть понимаю что происходит. А тут набор символов - и на выходе то ,что надо. Шаманство. :)

Ещё момент - sed при первом запуске тормозит неслабо. На 4-м пне по полсекунды думает. А вот awk сразу результат выдал. Правда повторные запуски на глаз разницы не вызвили :)
...
Рейтинг: 0 / 0
08.09.2005, 23:59:05
    #33260010
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
думаю, разница во времени - медленнее тот, который первым вызывался, а дальше файловый кеш уже работал.
Так вообще обычно awk все же помедленнее стартует, когда-то проводил соревнования :-)

К тому же если иметь в виду пример от 19:37 - то в нем сделано все, чтобы стать неэффективным - два конвейра, первый awk посимвольно все разворачивает, потом unuq, а потом awk все сворачивает опять же посимвольно. Это должно быть ну оч-чень медленно!
...
Рейтинг: 0 / 0
09.09.2005, 00:21:42
    #33260032
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
--null--Сорри, мой первый вариант позорен и неуклюж.
Вот удаление всех повторений


Код: plaintext
echo "###P#ZZZf"  | sed s/\(.\)\ 1 */\ 1 /g


Null
круто.
)))))))
я б, наверно, не сообразил бы
...
Рейтинг: 0 / 0
09.09.2005, 07:25:31
    #33260159
no-dashi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
Дети, скажите echo "#####PPPPP####" | tr -s "#P" и не мучайтесь! :-)
...
Рейтинг: 0 / 0
09.09.2005, 09:04:42
    #33260229
lissyara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
Клёво :)
...
Рейтинг: 0 / 0
09.09.2005, 09:36:21
    #33260293
v6y
v6y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
no-dashiДети, скажите echo "#####PPPPP####" | tr -s "#P" и не мучайтесь! :-)
Вариант от --null-- (sed "s/\(.\)\1*/\1/g") представляет собой общее решение, когда набор входящих символов заранее неизвестен, а потому с моей точки зрения является более предпочтительным и более "взрослым" (профессиональным).
...
Рейтинг: 0 / 0
09.09.2005, 09:57:41
    #33260345
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
спасибо :)
Но что-то шаблонное мышление (sed/awk) иногда подводит - tr действительно
вариант весьма прикольный.
Думаю, вот универсальный для tr для ASCII кодировки:

Код: plaintext
echo "#####PPPPP##P##" | tr -s ["\000"-"\177"]
...
Рейтинг: 0 / 0
09.09.2005, 10:19:40
    #33260415
lissyara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
А кончилось всё вот так:
Код: plaintext
1.
kuda_zvonili=`echo ${incoming} | tr -s "\*" | awk -F \* '{print $2}' | 
tr -s "#" | awk -F \# '{print $3}'`



Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
09.09.2005, 10:41:47
    #33260526
v6y
v6y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
--null--спасибо :)
Но что-то шаблонное мышление (sed/awk) иногда подводит - tr действительно
вариант весьма прикольный.
Думаю, вот универсальный для tr для ASCII кодировки:

Код: plaintext
echo "#####PPPPP##P##" | tr -s ["\000"-"\177"]


Тут речь идет об IP-телефонии, поэтому можно предположить, что цифр это касаться не должно. Как это будет выглядеть на tr (практичекси никогда его не использую)? Так
Код: plaintext
1.
tr -s ["\000"-"\057","\072"-"\177"]
?

На sed
Код: plaintext
1.
sed "s/\([^0-9]\)\1*/\1/g"
В данном случае на sed букв меньше
...
Рейтинг: 0 / 0
09.09.2005, 10:42:54
    #33260535
v6y
v6y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
lissyara
А кончилось всё вот так:
Код: plaintext
1.
kuda_zvonili=`echo ${incoming} | tr -s "\*" | awk -F \* '{print $2}' | 
tr -s "#" | awk -F \# '{print $3}'`

А как incoming выглядит в общем случае?


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
09.09.2005, 10:44:16
    #33260540
v6y
v6y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
shell - убрать одинаковые символы в строке.
lissyara
А кончилось всё вот так:
Код: plaintext
1.
kuda_zvonili=`echo ${incoming} | tr -s "\*" | awk -F \* '{print $2}' | 
tr -s "#" | awk -F \# '{print $3}'`



Posted via ActualForum NNTP Server 1.3
Еще раз :)
А как incoming выглядит в общем случае?
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / shell - убрать одинаковые символы в строке. / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]