여러 공백 행을 하나의 공백 행으로 대체하는 sed 스크립트를 작성했지만 예상대로 작동하지 않습니다. 왜 나에게 설명 할 수있는 모두에게 감사 할 것입니다. 작동 예제를 참조하지 마십시오. Google에 익숙합니다. 나는 단지 sed가 어떻게 작동하는지 알고 싶습니다.sed 여러 공백 행을 하나의 공백 행으로 대체
코드는
sed ':a;/^\n*$/{N;ba};s/^\n\n*/\n/' input_file
그래서 논리는 간단하다 : 나오지 때 라인을 읽고는 블랭크 또는 여러 줄 바꿈 문자 (이 /^*\n$
조건이다), 나는 다음 줄을 추가 할 나오지에게있다 패턴 공간. 공백이 아닌 행이 발견되는 즉시 대체 문자 s/^\n\n*/\n/
이 완료됩니다.
파일 끝 부분에 빈 줄이있는 경우를 제외하고 모든 것이 잘 작동합니다. 이 공란은 하나의 공란으로 대체되지 않으며 나는 그 이유를 이해하지 못한다.
아이디어가 있으십니까? 같은 결과 만 적은 수의 대체를 위해,
perl -0777 -pe 's/\n+/\n/g' yourfile
또는 : 당신이 그런데 \n+
를 사용할 수있는 대신 \n\n*
의
영업 이익은 하나의 빈 줄에 모든 연속 blanklines을 대체하고자합니다. 명령은 모든 공백 행을 제거합니다. –
이것은 문제를 해결하지 못하며,'\ n +'를 사용하면 파일 끝에있는 개행 문자는 무시됩니다. 더하기, OP가 그가 sed로 작업하기를 원했을 때 – Aserre
@ zx81 연속적인 빈 줄을 지우려면'perl -00 -pe ''' – hwnd