특정 단어 "[FACT]" 뒤에 두 개의 새 줄이 있는 자바스크립트 파일이 있는데 이를 새 줄로 바꾸고 싶습니다. bash 스크립트에서 이 작업을 수행해야 합니다. 일반적으로 나는 를 사용 하지만 이것은 입력에서 개행을 처리하는 데 적합하지 않은 sed
것으로 나타났습니다 . sed
(내가 틀렸다면 정정해주세요).
프로그래밍 방식으로 이를 수행하려면 쉘 스크립트나 javascript/Java 등을 사용할 수 있지만 소프트웨어 엔지니어링(유지 관리성, 이식성 등) 관점에서 보면 이것이 좋은 솔루션이 될 것입니다.
sed 's/\[FACT\]\/n/\[FACT\]/g' file.js
답변1
이식성? 텍스트 처리? 물론 펄:
perl -n0777e 's{\n+}{\n}g' your_file
여기서는 -0777
Perl이 연속적인 새 행을 찾을 수 있도록 전체 파일을 한 번에 읽도록 지시합니다.
위의 내용은 중복된 개행 문자를 모두 제거합니다. 다음 콘텐츠만 삭제하려면 [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