LINUX.ORG.RU

sed и замена трех цифр на четыре

 , ,


1

1

Добрый все день!

Требуется ваша помощь!!!

Суть: в текстовом файле есть строки вида:

('128', 'sip', 'SIP/128', 'fixed', '128', 'Sergey', ''),
('250', 'sip', 'SIP/250', 'fixed', '250', 'Peregovorka 1', ''),
('300', 'sip', 'SIP/300', 'fixed', '300', 'Vladimir', ''),
('631', 'sip', 'SIP/631', 'fixed', '631', 'Redenskiy', ''),
('308', 'sip', 'SIP/308', 'fixed', '308', 'Irina', ''),
('305', 'sip', 'SIP/305', 'fixed', '305', 'Fedor', ''),
('524', 'sip', 'SIP/524', 'fixed', '524', 'Victor', ''),

Задача: добавить в начало цифру 1. Желаемый результат:

('1128', 'sip', 'SIP/1128', 'fixed', '1128', 'Sergey', ''),
('1250', 'sip', 'SIP/1250', 'fixed', '1250', 'Peregovorka 1', ''),
('1300', 'sip', 'SIP/1300', 'fixed', '1300', 'Vladimir', ''),
('1631', 'sip', 'SIP/1631', 'fixed', '1631', 'Redenskiy', ''),
('1308', 'sip', 'SIP/1308', 'fixed', '1308', 'Irina', ''),
('1305', 'sip', 'SIP/1305', 'fixed', '1305', 'Fedor', ''),
('1524', 'sip', 'SIP/1524', 'fixed', '1524', 'Victor', ''),

Весь день бьюсь, не получается у меня (((

ОС: Xubuntu

UPD: Было бы круто, если заменить все 3х значные числа (XXX) на четырехзначные 1XXX.



Последнее исправление: cetjs2 (всего исправлений: 2)

Даже такой нуб в sed, как я, смотрит на тебя с непониманием:

$ cat in | sed -e "s/'/'1/" -e "s/\//\/1/" -e "s/d', '/d', '1/"
('1128', 'sip', 'SIP/1128', 'fixed', '1128', 'Sergey', ''),
('1250', 'sip', 'SIP/1250', 'fixed', '1250', 'Peregovorka 1', ''),
('1300', 'sip', 'SIP/1300', 'fixed', '1300', 'Vladimir', ''),
('1631', 'sip', 'SIP/1631', 'fixed', '1631', 'Redenskiy', ''),
('1308', 'sip', 'SIP/1308', 'fixed', '1308', 'Irina', ''),
('1305', 'sip', 'SIP/1305', 'fixed', '1305', 'Fedor', ''),
('1524', 'sip', 'SIP/1524', 'fixed', '1524', 'Victor', ''),

d ★★★★★
()

Блин!!!

я шел от того, что беру, например, 101, ищу его и заменяю на 1101. Столкнулся с тем, что sed с переменными не стал работать ((

levin-a
() автор топика
Ответ на: комментарий от d

Даже такой нуб в sed, как я, смотрит на тебя с непониманием:
sed -e «s/'/'1/» -e «s/\//\/1/» -e «s/d', '/d', '1/»

тонко однако :)

ziemin ★★
()
Ответ на: комментарий от levin-a

я шел от того, что беру, например, 101, ищу его и заменяю на 1101. Столкнулся с тем, что sed с переменными не стал работать ((

Ключ -E включает в т.ч. backreferences.

Но не забывай случаи типа «Peregovorka 1», где не надо заменять.

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 1)

UPD: Было бы круто, если заменить все 3х значные числа (XXX) на четырехзначные 1XXX.

Это пропустил. Так:

sed "s/^\(('\)\(...\)'/\11\2'/"

ziemin ★★
()

UPD: Было бы круто, если заменить все 3х значные числа (XXX) на четырехзначные 1XXX.

sed -E "s/[0-9]{3}/1\0/g"

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

sed -E «s/[0-9]{3}/1\0/g»

Вот! тоже сработало!!!

Спасибо!!!!!!!!!!!!!!!

levin-a
() автор топика
Ответ на: комментарий от ziemin

Даже перепроверил:

$ sed "s/^\(('\)\(...\)'/\11\2'/"<<EOF
> ('128', 'sip', 'SIP/128', 'fixed', '128', 'Sergey', ''),
> ('250', 'sip', 'SIP/250', 'fixed', '250', 'Peregovorka 1', ''),
> ('300', 'sip', 'SIP/300', 'fixed', '300', 'Vladimir', ''),
> ('631', 'sip', 'SIP/631', 'fixed', '631', 'Redenskiy', ''),
> ('308', 'sip', 'SIP/308', 'fixed', '308', 'Irina', ''),
> ('305', 'sip', 'SIP/305', 'fixed', '305', 'Fedor', ''),
> ('524', 'sip', 'SIP/524', 'fixed', '524', 'Victor', ''),
> EOF
('1128', 'sip', 'SIP/128', 'fixed', '128', 'Sergey', ''),
('1250', 'sip', 'SIP/250', 'fixed', '250', 'Peregovorka 1', ''),
('1300', 'sip', 'SIP/300', 'fixed', '300', 'Vladimir', ''),
('1631', 'sip', 'SIP/631', 'fixed', '631', 'Redenskiy', ''),
('1308', 'sip', 'SIP/308', 'fixed', '308', 'Irina', ''),
('1305', 'sip', 'SIP/305', 'fixed', '305', 'Fedor', ''),
('1524', 'sip', 'SIP/524', 'fixed', '524', 'Victor', ''),

ziemin ★★
()
Ответ на: комментарий от ziemin

Да, 5е тоже надо. Все трехзначные числа надо менять на 1XXX

levin-a
() автор топика
Ответ на: комментарий от levin-a

добавить в начало цифру 1

Вот что сбило меня с толку :)

ziemin ★★
()
24 ноября 2013 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.