2011-07-05 5 views
4

나는 그렇게 최종 출력이됩니다에서 나는 새로운 라인을 제거하는 방법새로운 라인을 제거

 
    1 test 
    test 

처럼 파일이 있습니다

1 test test

나는 이미 어떤 sed를 시도했지만 나는 그것을 작동시킬 수 없었다.

+0

'' Rahul

+0

을 제거하지만 어떻게해야합니까? 다음 줄에 너비가 시작되지 않으면 eck? 이전 줄 바꿈을 제거하십시오. 떨어져 모든 것들은 할 수 있지만 그들을 결합 수 없습니다. – justahuman

답변

3

첫 번째 줄을 제외한 숫자로 시작하는 경우 조금 더 똑똑해 줄 앞에서 새 줄을 인쇄 할 수 있습니다.

awk 'BEGIN{ORS="";} NR==1 { print; next; } /^[[:digit:]]/ { print "\n"; print; next; } { print; }' 

awk 스크립트 :

BEGIN { ORS=""; }       # default: no newline between output records 
NR==1 { print; next; }      # first line: print 
/^[[:digit:]]/ { print "\n"; print; next; } # if starts with a digit: print newline before 
{print;}            # other lines (next; has not been called yet) 
-1

'나오지'를 이용하여 용액 :

입력 파일 (INFILE)

1 test 
test 
2 two 
3 three 
4 four 
five 
six 
7 seven 
eight 
9 nine 

'SED'프로그램 (script.sed을) :

/[0-9]\+/ { 
     : a 
     N 
     /\n[0-9]\+/ { 
       P 
       s/.*\n// 
     } 
     t a 
} 

y/\n//

실행 :

$ sed -f script.sed infile 

출력 : SED으로 달성하기 매우 간단하다

1 test test 
2 two 
3 three 
4 four five 
six 
7 seven eight 
9 nine 
0

. 작동 원리

$ sed '/^[0-9]/{N; s/\n/ /;}' numbered 
1 abc def 
ghi 
2 jkl mno 
3 pqr 4 stu 
vxw 

: 트릭을 할 것입니다

$ cat numbered      
1 abc 
def 
ghi 
2 jkl 
mno 
3 pqr 
4 stu 
vxw 

명령 sed '/^[0-9]/{N; s/\n/ /;}' numbered 아래의 파일을 고려해 현재 행은 숫자로 시작 않을 경우 첫째, 그것은 확인 :

/^[0-9]/ 

/^[0-9]/address이며 숫자로 시작하는 줄만 일치합니다. 일부 줄이 일치하면 주소 뒤에 오는 명령이 실행됩니다.

이 경우이 명령은 기능 목록을 여는 {입니다. 함수 목록은 두 개 이상의 명령을 하나만있는 것처럼 집계합니다. 이 경우 함수 목록에 두 개의 명령이 있습니다.

N 

이 명령은 줄 바꿈 및 패턴 영역에 다음 줄을 추가합니다 : 첫 번째는 N 명령입니다. 다음주기는 현재주기 후에 더 이상 고려되지 않습니다.

s/\n//

그래서, N에 의해 추가 된 줄 바꿈은 공백으로 대체됩니다 : 다음 명령은 공백으로 줄 바꿈을 대체 s///입니다. 그런 다음 기능 목록을 }으로 닫아야합니다.그 결과는 다음과 같습니다

나는 간결하게 한 줄에 모든 명령을 넣어 한 이후
/^[0-9]/{ 
    N 
    s/\n//
} 

이 기능 목록 내부의 명령은 세미콜론으로 구분해야합니다

/^[0-9]/{N;s/\n/ /;} 

주 그 라인 시작하는 경우 숫자로 시작하는 다른 행 다음에 숫자가 오면 다음 행이 이전 행과 조인되며 명령이 그 행에 적용됩니다.

5

이 트릭을 수행해야합니다

sed -n '$!{ 1{x;d}; H}; ${ H;x;s|\n\([^0-9]\)| \1|g;p}' inputfile 

입력 :

1 test1 
test1 
2 test2 
test2 
test2 
3 test3 
4 test4 

출력 : n을 \ 'tr` 그럴`처럼`사용할 수 있습니다

1 test1 test1 
2 test2 test2 test2 
3 test3 
4 test4 
+2

인상적으로 간결 – Bohemian

+0

숫자 대신에 다음 줄을 패턴으로 사용할 수 있도록이 스크립트를 어떻게 적용 할 수 있습니까? –

+0

이 설명은 명령에 대한 설명이 제공되면 크게 향상 될 것입니다 (@ brandizzi의 경우처럼) – davemyron

관련 문제