"Разбавить" строку подстрокой

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
bormant
Сообщения: 1354

"Разбавить" строку подстрокой

Сообщение bormant »

Возникла задача: в командной строке/скрипте bash после каждого символа строки, (желательно: кроме последнего), добавить "~?". Например,
было "12345"
стало "1~?2~?3~?4~?5"

Чем бы это проделать?

ps. Желательно, короче, чем

Код: Выделить всё

$(echo "12345" | sed 's/./&~?/g')
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: "Разбавить" строку подстрокой

Сообщение SLEDopit »

Код: Выделить всё

echo 12345 | sed 's/./&~?/g;s/~?$//'

update "ps" не заметил (его не было?)
куда еще короче то?)
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: "Разбавить" строку подстрокой

Сообщение ZyX »

SLEDopit писал(а):
02.11.2011 18:45

Код: Выделить всё

echo 12345 | sed 's/./&~?/g;s/~?$//'

update "ps" не заметил (его не было?)
куда еще короче то?)

В zsh работает echo ${${"$(<<< 12345)"///~?}[3,-1]}. В bash — нет (и я, честно говоря, не совсем уверен, не является ли такое поведение ${//}, ошибкой).
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: "Разбавить" строку подстрокой

Сообщение Ленивая Бестолочь »

у меня работает в баше.
debian sid, bash 4.1-3.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: "Разбавить" строку подстрокой

Сообщение SLEDopit »

Ленивая Бестолочь писал(а):
12.11.2011 02:53
у меня работает в баше.
debian sid, bash 4.1-3.

Код: Выделить всё

 $ bash --version
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

 $ echo ${${"$(<<< 12345)"///~?}[3,-1]}
-bash: ${${"$(<<< 12345)"///~?}[3,-1]}: bad substitution

У Вас какие-то хитрые надстройки?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: "Разбавить" строку подстрокой

Сообщение ZyX »

SLEDopit писал(а):
13.11.2011 20:14
Ленивая Бестолочь писал(а):
12.11.2011 02:53
у меня работает в баше.
debian sid, bash 4.1-3.

Код: Выделить всё

 $ bash --version
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

 $ echo ${${"$(<<< 12345)"///~?}[3,-1]}
-bash: ${${"$(<<< 12345)"///~?}[3,-1]}: bad substitution

У Вас какие-то хитрые надстройки?

Вероятно, имелась ввиду только та часть, где используется замена. Попробуйте echo ${PWD///~?}.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: "Разбавить" строку подстрокой

Сообщение sash-kan »

ZyX писал(а):
18.11.2011 20:43
Попробуйте echo ${PWD///~?}.
и что должна вернуть данная конструкция вместо текущего каталога?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: "Разбавить" строку подстрокой

Сообщение ZyX »

sash-kan писал(а):
19.11.2011 07:18
ZyX писал(а):
18.11.2011 20:43
Попробуйте echo ${PWD///~?}.
и что должна вернуть данная конструкция вместо текущего каталога?

Строку, разбавленную подстрокой. Сделайте это в zsh и увидите что‐то вроде ~?/~?h~?o~?m~?e~?/~?z~?y~?x~?/~?.~?v~?a~?m.
Спасибо сказали: