- Разбить строку на символы, XoRe, 23:17 , 10-Ноя-11 (1)
> Надо чтобы любая строка посимвольно представлялась в виде элементов массива. > С awk недостаточно хорошо общался, но думаю, юзать надо его. Примерно так: > Пусть строка в файле имеет вид 123qwe_!**()skhf___ > тогда > awk '/.*/' file > найдет любые символы. Вопрос - как записать каждый из них в отдельную > переменную, да еще и при выходе из awk, который находится внутри > shell-скрипта (это же получается subshell), не потерять эти переменные?# echo '123qwe_!**()skhf___' | perl -e '$, = " "; while ($line = <STDIN>) { print (split //, $line); }' 1 2 3 q w e _ ! * * ( ) s k h f _ _ _ > Надо чтобы любая строка посимвольно представлялась в виде элементов массива. > как записать каждый из них в отдельную переменную
Вы определитесь, вам каждый символ в отдельную переменную, или строчку в массив?
- Разбить строку на символы, Andrey Mitrofanov, 10:11 , 11-Ноя-11 (2)
> Пусть строка в файле имеет вид 123qwe_!**()skhf___ > тогда Ж))) Какая _качественная строка! То * экспандится, то !. :))) Не, я, конечно, написал цикл с while и аналогом substr-а на bash-е, **но** тот десяток вариантов, который не заработал до того -- просто _кричит, что постановка задачи неверна в части _выбора _инструмента...
- Разбить строку на символы, erera22, 16:31 , 11-Ноя-11 (3)
Формируем файл: echo "1 2 fsd2 f3 f3as 1233" > /tmp/file Считываем его в массив: arr=($(cat /tmp/file)) Ну и вывод массива: for i in ${arr[@]} ; do echo $i ; done В результате: 1 2 fsd2 f3 f3as 1233
- Разбить строку на символы, Andrey Mitrofanov, 19:34 , 11-Ноя-11 (4)
Во-первых, ему надь посимвольно, не по словам. Во-вторых, см.выше про * и ! .
- Разбить строку на символы, BillyBoy, 17:33 , 12-Ноя-11 (5)
> Надо чтобы любая строка посимвольно представлялась в виде элементов массива.Что за тупость. В shell любая строка и так уже массив. % str='123qwe_!**()skhf___' % echo $str[5] w
- Разбить строку на символы, shadowmaan, 22:36 , 12-Ноя-11 (6)
>> Надо чтобы любая строка посимвольно представлялась в виде элементов массива. > Что за тупость. В shell любая строка и так уже массив. > % str='123qwe_!**()skhf___' > % echo $str[5] > w Да, но это только в zsh. В bash, например, echo выведет 123qwe_!**()skhf___[5]
- Разбить строку на символы, BillyBoy, 02:02 , 13-Ноя-11 (8)
> Да, но это только в zsh. В bash, например, echo выведет аа, совсем я что-то выпал из реальности, совсем забыл что ещё кто-то остался на баше В bash немножко сложнее (и надо помнить что элементы в массиве с нуля нумеруются в отличие от zsh, хотя строго говоря это не массив): % str='123qwe_!**()skhf___' %echo ${str:4:1} w
- Разбить строку на символы, shadowmaan, 02:23 , 13-Ноя-11 (9)
>> Да, но это только в zsh. В bash, например, echo выведет > аа, совсем я что-то выпал из реальности, совсем забыл что ещё кто-то > остался на баше > В bash немножко сложнее (и надо помнить что элементы в массиве с > нуля нумеруются в отличие от zsh, хотя строго говоря это не > массив): > % str='123qwe_!**()skhf___' > Лho ${str:4:1} > w Действительно. И аргумент echo заключить в двойные кавычки чтобы расширение не выполнялось.
- Разбить строку на символы, shadowmaan, 23:03 , 12-Ноя-11 (7)
> Надо чтобы любая строка посимвольно представлялась в виде элементов массива. > С awk недостаточно хорошо общался, но думаю, юзать надо его. Примерно так: > Пусть строка в файле имеет вид 123qwe_!**()skhf___ > тогда > awk '/.*/' file > найдет любые символы. Вопрос - как записать каждый из них в отдельную > переменную, да еще и при выходе из awk, который находится внутри > shell-скрипта (это же получается subshell), не потерять эти переменные?Можно примерно так str='123qwe_!**()skhf___' while [ -n "$str" ]; do temp=${str#?} # все кроме первого символа char=${str%"$temp"} # удаляем все, оставляя только первый символ echo "$char" # обрабатываем символ как надо, например помещаем в массив str=$temp # восстанавливаем строку, но уже без первого символа done
- Разбить строку на символы, gmananton, 20:44 , 14-Ноя-11 (10)
> temp=${str#?} # все кроме первого символа > char=${str%"$temp"} # удаляем все, оставляя только первый символ Идея прикольная, мне понравилось ) но сколько искал, не нашел - что за операторы такие #? и %. особенно непонятно, как во втором случае работает
- Разбить строку на символы, shadowmaan, 22:07 , 14-Ноя-11 (11)
>> temp=${str#?} # все кроме первого символа >> char=${str%"$temp"} # удаляем все, оставляя только первый символ > Идея прикольная, мне понравилось ) но сколько искал, не нашел - что > за операторы такие > #? и %. особенно непонятно, как во втором случае работает # тут строка str, начиная с ее начала, сравнивается с шаблоном (? в данном случае любой символ) совпадение удаляется, т.е. первый символ, остаток помещается в temp. % сравнивает str с конца и удаляет совпадение с шаблоном, оставляя только первый символ. Это я в какой-то книге видел. К сожалению не помню где. А, вот нашел: Learning the bash Shell, 3rd Edition, By Cameron Newham, ISBN: 0-596-00965-8
- Разбить строку на символы, LSTemp, 14:23 , 26-Ноя-11 (13)
>[оверквотинг удален] >> shell-скрипта (это же получается subshell), не потерять эти переменные? > Можно примерно так > str='123qwe_!**()skhf___' > while [ -n "$str" ]; do > temp=${str#?} # все кроме первого символа > char=${str%"$temp"} # удаляем все, оставляя только первый символ > echo "$char" # обрабатываем символ как надо, например помещаем > в массив > str=$temp # восстанавливаем строку, но уже без первого символа > done [root@local 222]# cat ./sss #!/bin/bash str="abcdef" for ((i=0; $i<${#str}; i=$(($i+1)))) do echo "$i=${str:$i:1}" done [root@local 222]# ./sss 0=a 1=b 2=c 3=d 4=e 5=f
- Разбить строку на символы, Teor, 13:58 , 20-Ноя-11 (12)
Может кто-то подсказать как сделать тоже самое, но не для bash, а для tcsh?
|