Здравствуйте. У меня имеется такая проблема с sed. Прошу помощи,заранее благодарен..Как мне вставить в переменную a="phone:TEnnANT$x\_IPPBX" между phone: и TennANT пробел, чтобы sed нормально обробатывал ... \t - табуляция работает, \n - перевод строки работает, но необходим пробел, но как не пытался его экранировать, ничего не выходит...либо ошибку пишет sed, либо не то что надо выдаёт...
> Здравствуйте. У меня имеется такая проблема с sed. Прошу помощи,заранее благодарен..
> Как мне вставить в переменную a="phone:TEnnANT$x\_IPPBX" между phone: и TennANT пробел,
> чтобы sed нормально обробатывал ... \t - табуляция работает, \n -
> перевод строки работает, но необходим пробел, но как не пытался его
> экранировать, ничего не выходит...либо ошибку пишет sed, либо не то что
> надо выдаёт...sed 's/\:/\: /'
---
Спасибо конечно, но попробовав таким способом, (далее выход команды идёт снова в обработку sed), в конечном итоге получается просто phone: и далее ничего не выводится...
может ещё какие то варианты есть??
echo "phone:TEnnANT$x\_IPPBX" | sed 's/TE/ TE/'
phone: TEnnANT\_IPPBX
> может ещё какие то варианты есть??Команду свою показывай, показывай, что подаёшь на вход и что хочешь получать на выходе. Телепатия не работает.
>> может ещё какие то варианты есть??
> Команду свою показывай, показывай, что подаёшь на вход и что хочешь получать
> на выходе. Телепатия не работает.Вот сама программа, не судите строго, только недавно начал писать скрипты
#!/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 ]; thenif [ -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
elseecho "Файл cfg.yaml не существует или находится в другой дирректории "
fi
else
echo "Файл sip_internal_60XX.conf не существует или находися в другой дирректории"
fi
>[оверквотинг удален]
> 1>&2
> else
>
> echo "Файл cfg.yaml не существует
> или находится в другой дирректории "
> fi
> else
> echo "Файл sip_internal_60XX.conf не
> существует или находися в другой дирректории"
> fiМетоды, которые я попробовал и которые предложили, не работают, но \t и \n если подставить всё работает...Повторю на выходе должны быть строки с пробелами...Спасибо
>[оверквотинг удален]
>> echo "Файл cfg.yaml не существует
>> или находится в другой дирректории "
>> fi
>> else
>> echo "Файл sip_internal_60XX.conf не
>> существует или находися в другой дирректории"
>> fi
> Методы, которые я попробовал и которые предложили, не работают, но \t и
> \n если подставить всё работает...Повторю на выходе должны быть строки с
> пробелами...СпасибоПрекрасно работает sed в вашем скрипте.
Вот кусок вашего скрипта#!/bin/sha1="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 отрабатывает свое.
Может у вашего баша башку снесло? ))
#!/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.
Стыдоба.
>[оверквотинг удален]
> 8);
> push @$cfg, $user;
> $user = {};
> }
> }
> print Dump $cfg;
>
Я же сказал, что только учусь, и стыдиться мне нечего... а если ты мудак, то и на других обзываться нечего. За скрипт спасибо...
Еще раз услышу подобные слова - уйдешь в RO.