개행 문자로 끝나는 패턴을 개행 문자가 없는 동일한 패턴으로 바꿉니다.

개행 문자로 끝나는 패턴을 개행 문자가 없는 동일한 패턴으로 바꿉니다.

특정 단어 "[FACT]" 뒤에 두 개의 새 줄이 있는 자바스크립트 파일이 있는데 이를 새 줄로 바꾸고 싶습니다. bash 스크립트에서 이 작업을 수행해야 합니다. 일반적으로 나는 를 사용 하지만 이것은 입력에서 개행을 처리하는 데 적합하지 않은 sed것으로 나타났습니다 . sed(내가 틀렸다면 정정해주세요).

프로그래밍 방식으로 이를 수행하려면 쉘 스크립트나 javascript/Java 등을 사용할 수 있지만 소프트웨어 엔지니어링(유지 관리성, 이식성 등) 관점에서 보면 이것이 좋은 솔루션이 될 것입니다.

sed 's/\[FACT\]\/n/\[FACT\]/g' file.js

답변1

이식성? 텍스트 처리? 물론 펄:

perl -n0777e 's{\n+}{\n}g' your_file

여기서는 -0777Perl이 연속적인 새 행을 찾을 수 있도록 전체 파일을 한 번에 읽도록 ​​지시합니다.

위의 내용은 중복된 개행 문자를 모두 제거합니다. 다음 콘텐츠만 삭제하려면 [FACT]다음을 수행하세요.

perl -n0777e 's{\[FACT\]\n+}{\n}g' your_file

답변2

나는 "두 개의 새 줄"이 \n\n해당 줄 뒤에 두 개의 빈 줄 [FACT](세 개의 줄 바꿈이 됨)이 아니라 를 의미한다고 가정합니다. 어느 쪽이든 sed는 그 다음의 첫 번째 개행 문자만 제거하기 때문에 작동합니다 [FACT].

$ echo -e '[FACT]\n\nend'
[FACT]

end

[FACT]이것은 일치하는 모든 줄로 끝나는 줄을 검색 하고 N이를 사용하여 현재 패턴 공간에 다음 줄을 추가하고 sed가 일반적으로 패턴 공간에서 제거하는 개행을 유지합니다.

$ echo -e '[FACT]\n\nend' |sed '/\[FACT\]$/ { N; s/\n// }'
[FACT]
end

[FACT]줄 끝에서 특별히 필요하지 않은 경우 $명령에서 제거하세요.

이는 포함하는 줄의 끝에서 개행 문자를 기술적으로 제거하므로 [FACT]기술적으로 두 줄을 하나로 연결합니다.

$ echo -e '[FACT]\nhelp\nend' 
[FACT]
help
end

$ echo -e '[FACT]\nhelp\nend' |sed '/\[FACT\]$/ { N; s/\n// }'
[FACT]help
end

관련 정보