2013-08-31 1 views
1

아직도 전화 조작. 나는 아래에 따라 전화 번호 목록이 없습니다 : 당신이 7 행 번호 5 전화 번호 패턴을 발견 한 경우가 더있다전화 번호 목록 조작 중첩 된 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 

"-" 가 어떻게 삽입 할 수 있습니다 "-"SED 나 AWK를 사용하여 ?

전혀 가능하다면 어떤 종류의 중첩 된 sed 조건부 대체를해야 할 것 같은 느낌입니다.

아무도 도와 줄 수 있습니까?

답변

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이이 작동 감사의 현재 위치에서 편집

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

사용 -i ...하지만 난 하드를 데 이것에 대한 논리 흐름을 이해하려고 노력하고 있습니까? 이 {$ 0 = $ 1 ""$ 2 "-"$ 3}의 의미는 무엇입니까? – hutanrimba

+2

@HutanRimba - man awk. 진지하게. –

+0

$ 0은 전체 문자열입니다. $ 1은 첫 번째 출원 (855 건)이고 $ 2는 두 번째 등입니다. 따라서 처음 제출 된 파일을 사용하여 $ 0을 다시 작성한 다음 두 번째 파일을 작성한 다음 세 번째 파일을 작성하십시오. – Jotne

1

사용이 펄 한 줄 :

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

OS와 쉘에 따라, 당신은 백 슬래시와 $ 문자를 보존하기 위해 작은 따옴표를 사용해야 할 수도 있습니다.

4

당신은 하이픈으로 제 2 공간을 대체 할 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

펄을 사용하면 기본적으로 올바른 형식을 사용하여 각 행을 다시 작성할 수 있습니다. 나는 자리의 세 그룹은 각 라인에 정확히가 가정 : 파일