URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9699
[ Назад ]

Исходное сообщение
"Пробелы в sed"

Отправлено Alexadm , 25-Июн-13 11:49 
Здравствуйте. У меня имеется такая проблема с sed. Прошу помощи,заранее благодарен..

Как мне вставить в переменную a="phone:TEnnANT$x\_IPPBX" между phone: и TennANT пробел, чтобы sed нормально обробатывал ... \t - табуляция работает, \n - перевод строки работает, но необходим пробел, но как не пытался его экранировать, ничего не выходит...либо ошибку пишет sed, либо не то что надо выдаёт...


Содержание

Сообщения в этом обсуждении
"Пробелы в sed"
Отправлено erera22 , 25-Июн-13 17:04 
> Здравствуйте. У меня имеется такая проблема с sed. Прошу помощи,заранее благодарен..
> Как мне вставить в переменную a="phone:TEnnANT$x\_IPPBX" между phone: и TennANT пробел,
> чтобы sed нормально обробатывал ... \t - табуляция работает, \n -
> перевод строки работает, но необходим пробел, но как не пытался его
> экранировать, ничего не выходит...либо ошибку пишет sed, либо не то что
> надо выдаёт...

sed 's/\:/\: /'


"Пробелы в sed"
Отправлено erera22 , 25-Июн-13 17:05 
---

"Пробелы в sed"
Отправлено Alexadm , 25-Июн-13 17:50 
Спасибо конечно, но попробовав таким способом, (далее выход команды идёт снова в обработку sed), в конечном итоге получается просто phone:   и далее ничего не выводится...
может ещё какие то варианты есть??


"Пробелы в sed"
Отправлено stereoPANDA , 25-Июн-13 17:58 
echo "phone:TEnnANT$x\_IPPBX" | sed 's/TE/ TE/'
phone: TEnnANT\_IPPBX

"Пробелы в sed"
Отправлено Andrey Mitrofanov , 25-Июн-13 17:59 
> может ещё какие то варианты есть??

Команду свою показывай, показывай, что подаёшь на вход и что хочешь получать на выходе. Телепатия не работает.


"Пробелы в sed"
Отправлено Alexadm , 25-Июн-13 18:29 
>> может ещё какие то варианты есть??
> Команду свою показывай, показывай, что подаёшь на вход и что хочешь получать
> на выходе. Телепатия не работает.

Вот сама программа, не судите строго, только недавно начал писать скрипты

#!/bin/bash -x

genfile="/home/sip_internal_60XX.conf"
file="/home/cfg.yaml"
otsort="/home/newcfg.yaml"


        for (( i=1; $i<=1000; i=$i+10 )); do


                x=$(cat $genfile | sed -n $i\p | cut --complement -b '1-8,13-33')

                        m=$(( $i + 5 ))

                g=$(cat $genfile | sed -n $m\p | cut --complement -b '1-7')

                        f=$(echo $x | cut --complement -b '1-2')

                          f=${f#0}

                            k=$(( $f - 1 ))

a1="phone:\TEnnANT$x\_IPPBX"
  b1="user_name:\TEnnANT$x\_IPPBX"
   c1="auth_name:\TEnnANT$x\_IPPBX"
    d1="auth_pass:\\$g"

                a=$(echo $a1 | sed 's/TE/ TE/')
                 b=$(echo $b1 | sed 's/user_name\:/user_name\: /')
                  c=$(echo $c1 | sed 's/auth_name\:/auth_name\: /')
                   d=$(echo $d1 | sed 's/auth_pass\:/auth_pass\: /')

                          e="$a\n\t\t\t$b\n\t\t\t$c\n\t\t\t$d"

                              PARAM=`echo $e`


  if [ -e $genfile ]; then

        if [ -e $file  ] && [ -f $file ]; then

                   if [ ! -f "$otsort" ]

                        then

                          /bin/cp $file $otsort
                           sed -i '/phone: ""$/d' "$otsort"
                            sed -i '/user_name: ""$/d' "$otsort"
                             sed -i '/auth_name: ""$/d' "$otsort"
                              sed -i '/auth_pass: ""$/d' "$otsort"

                                sed "/port_$k:/a\                        "$PARAM $otsort >> complete.yaml

                        else

                            sed -i '/phone: ""$/d' "$otsort"
                             sed -i '/user_name: ""$/d' "$otsort"
                              sed -i '/auth_name: ""$/d' "$otsort"
                               sed -i '/auth_pass: ""$/d' "$otsort"

                                 sed "/port_$k:/a\                        "$PARAM $otsort -i complete.yaml
fi


          echo "" 1>&2
          else

                  echo "Файл cfg.yaml не существует или находится в другой дирректории "

        fi

    else

        echo "Файл sip_internal_60XX.conf не существует или находися в другой дирректории"


  fi


"Пробелы в sed"
Отправлено Alexadm , 25-Июн-13 18:31 
>[оверквотинг удален]
> 1>&2
>           else
>            
>       echo "Файл cfg.yaml не существует
> или находится в другой дирректории "
>         fi
>     else
>         echo "Файл sip_internal_60XX.conf не
> существует или находися в другой дирректории"
>   fi

Методы, которые я попробовал и которые предложили, не работают, но \t и \n если подставить всё работает...Повторю на выходе должны быть строки с пробелами...Спасибо


"Пробелы в sed"
Отправлено михалыч , 25-Июн-13 20:36 
>[оверквотинг удален]
>>       echo "Файл cfg.yaml не существует
>> или находится в другой дирректории "
>>         fi
>>     else
>>         echo "Файл sip_internal_60XX.conf не
>> существует или находися в другой дирректории"
>>   fi
> Методы, которые я попробовал и которые предложили, не работают, но \t и
> \n если подставить всё работает...Повторю на выходе должны быть строки с
> пробелами...Спасибо

Прекрасно работает sed в вашем скрипте.
Вот кусок вашего скрипта

#!/bin/sh

a1="phone:\TEnnANT$x\_IPPBX"
b1="user_name:\TEnnANT$x\_IPPBX"
c1="auth_name:\TEnnANT$x\_IPPBX"

a=$(echo $a1 | sed 's/phone:/phone: /')
b=$(echo $b1 | sed 's/user_name:/user_name: /')
c=$(echo $c1 | sed 's/auth_name:/auth_name: /')

e="$a\n\t\t\t$b\n\t\t\t$c"

printf "$e"

Выхлоп с него:

phone: TEnnANT_IPPBX
                        user_name: TEnnANT_IPPBX
                        auth_name: TEnnANT_IPPBX

Если на bash'е, то
выхлоп, разумеется, несколько иной:

phone: \TEnnANT\_IPPBX
                        user_name: \TEnnANT\_IPPBX
                        auth_name: \TEnnANT\_IPPBX

Но суть дела не меняет, sed отрабатывает свое.
Может у вашего баша башку снесло? ))


"Пробелы в sed"
Отправлено ACCA , 26-Июн-13 05:47 

#!/usr/bin/perl
#
#    SYNOPSIS:
#           $0 /home/sip_internal_60XX.conf > /home/newcfg.yaml
#
use strict;
use warnings;
use YAML qw(Load Dump);

my $cfg = Load "/home/cfg.yaml";
die "Suspicious file format for cfg.yaml" if ref $cfg ne 'ARRAY';

my ($x, $user);
while (<>) {
      if ($. % 10 == 1) {
         chomp;
         $x = substr($_, 8, 5);
         $user->{phone} =
         $user->{user_name} =
         $user->{auth_name} = "TEnnANT$x\_IPPBX";
         $user->{port} = substr($x, 3)-1;
      } elsif ($. % 10 == 6) {
         chomp;
         $user->{auth_pass} = substr($_, 8);
         push @$cfg, $user;
         $user = {};
      }
}

print Dump $cfg;

Проще править, и будет работать примерно в 2200 раз быстрее.


Из-за похожих мудаков "появился" протокол Russian PPPoE.
Стыдоба.


"Пробелы в sed"
Отправлено Alexadm , 27-Июн-13 17:16 
>[оверквотинг удален]
> 8);
>          push @$cfg, $user;
>          $user = {};
>       }
> }
> print Dump $cfg;
>

> Проще править, и будет работать примерно в 2200 раз быстрее.
> Из-за похожих мудаков "появился" протокол Russian PPPoE.
> Стыдоба.

Я же сказал, что только учусь, и стыдиться мне нечего... а если ты мудак, то и на других обзываться нечего. За скрипт спасибо...


"Пробелы в sed"
Отправлено universite , 28-Июн-13 18:21 


Еще раз услышу подобные слова - уйдешь в RO.