2014-12-25 4 views
0

아래의 명령은 UNIX에서 제대로 작동하지만 Linux에서는 새 행을 대체하지 않습니다.linux sed가 새 행을 공백으로 바꿉니다. 예상대로 작동하지 않습니다.

#! /bin/sed -f 
:loop 
/[^]$/N 
s/\n// 
t loop 

여러 옵션을 시도했지만 아무 것도 작동하지 않는 것 같습니다. 어떤 제안?

+0

는 일치 :

\^를 사용하여 리터럴 ^ 일치 시키려면? – Wintermute

+0

이것은 내가 줄의 끝에있는 문자입니다. 그래서 기본적으로이 문자가 발견되면 현재 줄에 다음 줄을 추가하고 싶지 않습니다. – MJ03

+0

다시 확인하려면 "^"로 끝나는 줄에 다음 줄을 추가하지 않는 것이 좋습니까? 내가 묻는 이유는 당신의 질문 제목이 "새 줄이있는 공백"과 관련이 있다고 느낀다는 것입니다. – repzero

답변

1

[^]은 잘못된 표현입니다. 나는 당신의 버전이 sed를 받아들이는 이유를 모르지만 POSIX에서는 목록의 시작 부분에있는 ^을 반대로한다. 즉, [^abc]a, bc을 제외한 모든 문자와 일치합니다.

또한 ]을 목록에 일치 시키려면 열림 [ 또는 반전 ^ 바로 뒤에 나타나야합니다. []abc]a, b, c]과 일치하지만, [^]abc]은 4 개를 제외한 모든 문자와 일치합니다. 이 때문에 sed는 목록에 대해 ]을 찾을 수 없으며 오류가 발생하여 실패합니다. `[^]`가정 무엇

#! /bin/sed -f 
:loop 
/\^$/N 
s/\n// 
t loop 
+0

그것은 꽤 많이 요약합니다. 잘 했어. –

관련 문제