2012-04-03 2 views
13

가끔 줄 바꿈이있는 파일이 있습니다. 분할은 라인이 '+'(공백으로 시작될 수 있음)로 시작한다는 사실에 의해 신호됩니다.sed : 두 번째 줄에 따라 줄을 연결하십시오.

line 1 
line 2 
    + continue 2 
line 3 
... 

나는 다시 분할 선에 가입 싶습니다

line 1 
line 2 continue 2 
line 3 
... 

을 나오지도 사용. 나는 보다 먼저 행을 결합하는 방법이 명확하지 않습니다.입니다.

의견이 있으십니까?

답변

15

이 당신을 위해 작동 될 수 있습니다

sed '$!N;s/\n\s*+//;P;D' file 
+1

'\ s'를 공백으로 대체하면 멋지지 않습니다. GNU sed가 아닌 곳에서도 작동합니다! +1. – ghoti

+0

@ghoti 나는 [[blank :]] *'가 더 잘 작동 할 것이라고 믿는다. –

+1

@AquariusPower, yes, 공백과 일치하지만 탭과도 일치합니다. 물론 potong의 '\ s' 솔루션도 일치합니다. OP는 연속이 공백으로 선행 가능한 *로 표시되었지만 그는 탭에 대해 언급하지 않았다. 아마도 중요하지는 않지만 결코 알 수 없습니다. – ghoti

2

나는 이것이 나를 위해 좋은 도전이었을 정도로 sed의 일부가 아니다.

sed -n '1{h;n};/^ *+ */{s// /;H;n};{x;s/\n//g;p};${x;p}' 

는 AWK에서이 약 :

awk ' 
    NR == 1 {hold = $0; next} 
    /^ *\+/ {$1 = ""; hold=hold $0; next} 
    {print hold; hold = $0} 
    END {if (hold) print hold} 
' 

마지막 줄에 "+"라인 인 경우

이는 나오지 버전은 후행 빈 줄을 인쇄합니다. 그것을 억압하는 방법을 알아낼 수 없었다. 나오지도에서 이렇게

+0

참고. awk 버전은 물론 더 읽기 쉽지만'$ 1 = "";', awk가 $ 0을 기본 OFS로 다시 작성하도록 명령하기 때문에 문제가됩니다. 중요한 것은 아니지만 누군가이 솔루션을 사용하려는 경우 기억해야합니다. – ghoti

1

확실히 좋은 운동이지만, 펄에서 아주 사소한 :

perl -0777 -pe 's/\n\s*\+//g' input 
2

당신은 예 모드에서 빔을 사용할 수 있습니다

ex -sc g/+/-j -cx file 
  1. g 글로벌 검색

  2. -

    이는 GNU는-나오지 전용입니다

  3. x 저장 다음 라인

  4. j 가입 이전 행을 선택하고 가까운

관련 문제