Как добавить определенный символ после каждого символа?

Вместо того, чтобы tr -dcизбавиться от непечатаемых -символов, я бы просто использовал base64из coreutils:

$ base64 -w20 /dev/urandom | head -8
ckXkWvb0zJknz2zi4fRS
3Jv0dDbKiX8fef7SOfbH
QJySlGUzzhi32wvrGliK
YEiuz6v+EFaRYRMjvnJq
HCXIPiP9wmgONLRqm9uK
iHYwo5xIs8gGjQQEQBeX
8NkL4EkmOAHdmWhGvZYl
AcxD2DaTq2TZRsDL+UMx

Если проблемы с +и /, вы можете заменить их:

$ base64 -w20 /dev/urandom | tr +/ pq | head -8
zr7MgiEr7xBd7h9ihK30
IRNvDuT2H9HsHVq9yFqh
S1cihgfAInjfFspMNXVC
qUUwGErD7nZqtzQtLOo7
DNDp4TVWvHmbEh7HLDGX
GtqqDdEoceY8m5U7FGu0
TvGtTukm6Whr7VHN1mZG
DW5TUH525IA52zLKYACV
6
26.10.2020, 20:25
4 ответа

Сzsh:

$ number=12345
$ printf '%s\n' ${(j[+])${(s[])number}}
1+2+3+4+5

s[]флаг расширения параметра для разделения $numberна его символьные компоненты. j[+], чтобы присоединиться к ним с помощью +.

Сbash:

$ number=12345
$ shopt -s extglob
$ tmp=${number//@()/+}
$ printf '%s\n' "${tmp#+}"
1+2+3+4+5

${number//@()/+}заменяет все вхождения ничего на +. По какой-то причине ${number///+}не работает в bash(, но работает в zsh, хотя ).

3
18.03.2021, 22:55

С помощью GNU sed вы также можете:

sed 's/./+&/2g'
9
18.03.2021, 22:55

просто некоторые другие возможности использования perl вместо awk или sed:

echo 12345 | perl -lpe '$_ = join "+", split //;'

или (, если номер сохранен вfl.txt)

# echo 12345 > fl.txt
perl -lpe '$_ = join "+", split //;' fl.txt

параметр -lпросто позволяет избежать включения окончания строки (при объединении с помощью "+" ). в противном случае у вас было бы 1+2+3+4+5+в качестве результата.

в качестве альтернативы вы можете использовать метод, подобный уже упомянутому для sed:

perl -pe 's/.\K/+/g; s/\+$//;' fl.txt

или

perl -pe 's/.\K(?!$)/+/g;' fl.txt

или

perl -pe 's/\B/+/g;' fl.txt

вывод во всех случаях:

1+2+3+4+5
1
18.03.2021, 22:55

Разделить/объединить символы с помощью Ruby

Есть много способов сделать это. На пути к использованию Ruby, чтобы разбить вашу строку на символы, а затем соединить их вместе с символом +. Например, в командной строке:

$ ruby -e 'puts ARGV.first.chars.join "+"' 12345
1+2+3+4+5
0
18.03.2021, 22:55

Теги

Похожие вопросы