The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Разбить строку на символы, !*! gmananton, 10-Ноя-11, 18:23  [смотреть все]
Надо чтобы любая строка посимвольно представлялась в виде элементов массива.
С awk недостаточно хорошо общался, но думаю, юзать надо его. Примерно так:
Пусть строка в файле имеет вид 123qwe_!**()skhf___
тогда
awk '/.*/' file
найдет любые символы. Вопрос - как записать каждый из них в отдельную переменную, да еще и при выходе из awk, который находится внутри shell-скрипта (это же получается subshell), не потерять эти переменные?
  • Разбить строку на символы, !*! 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
  • Разбить строку на символы, !*! 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?





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

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