2013-08-31 5 views
1

Все еще о манипуляции с телефоном. у меня есть список телефонных номеров, согласно ниже:Перечень телефонных номеров Вложенные SED

(855) 422-6932 
(899) 991-9054 
(855) 912-7326 
(833) 390-8072 
(867) 934 2368 
(898) 731 7056 
(899) 251 5372 
(855) 137-6285 
(855) 294-5537 
(844) 680-7479 

Если вы заметили образец номер телефона на номер строки 5 до 7 он не имеет «-» как я могу вставить «-» с помощью СЭД или AWK ?

Похоже, что мне нужно будет сделать какую-то условную замену вложенных седов, если это вообще возможно.

Может ли кто-нибудь помочь?

ответ

3

Это близко к другому вопросу, который вы задали. Попробуйте изменить то, что у вас есть.

awk '!/-/ {$0=$1 " " $2 "-" $3}1' 
(855) 422-6932 
(899) 991-9054 
(855) 912-7326 
(833) 390-8072 
(867) 934-2368 
(898) 731-7056 
(899) 251-5372 
(855) 137-6285 
(855) 294-5537 
(844) 680-7479 
+0

Привет Jotne, это работает спасибо ... но я с трудом время, пытаясь понять логический поток на этом? что означает это {$ 0 = $ 1 "" $ 2 "-" $ 3}? – hutanrimba

+2

@HutanRimba - человек awk. Шутки в сторону. –

+0

$ 0 - полная строка. $ 1 - первая поданная (855) $ 2 - вторая и т. Д. Итак, заново создайте $ 0, используя первую поданную, а затем вторую, а затем третью. – Jotne

1

Используйте этот Perl один вкладыш:

perl -pe "s/(\(\d{3}\) \d{3})[ -](\d{4})/$1-$2/g" <in.txt >out.txt 

В зависимости от операционной системы и оболочки, вам может понадобиться использовать одинарные кавычки, чтобы сохранить обратную косую черту и $ символов.

4

Вы могли бы просто сказать sed заменить второе место в дефис:

sed 's/ /-/2' file 

Результаты:

(855) 422-6932 
(899) 991-9054 
(855) 912-7326 
(833) 390-8072 
(867) 934-2368 
(898) 731-7056 
(899) 251-5372 
(855) 137-6285 
(855) 294-5537 
(844) 680-7479 
+0

Спасибо, Стив это потрясающе! поэтому я предполагаю, что 2 указывает номер поля на выходе? – hutanrimba

+0

@HutanRimba: Нет. 'Sed' - редактор потока; «2» определяет возникновение; поэтому он будет действовать во втором случае (если есть) регулярного выражения. В вашем примере ввода может быть не более двух пробелов на строку. Если вы хотите поиграть с полями, используйте 'awk'. – Steve

+0

+1 - Я никогда не помню, что вы можете сказать sed, какой номер использования использовать. –

1

Использование Perl, вы можете существенно переписать каждую строку, используя правильный формат. Я предполагаю, что есть ровно 3 группы цифр в каждой строке:

perl -ne 'printf "(%s) %s-%s\n", (/\d+/g)' file 

использования -i для в месте редактирования файла

Смежные вопросы