![XY보다 긴 선을 삭제하는 방법은 무엇입니까?](https://linux55.com/image/16659/XY%EB%B3%B4%EB%8B%A4%20%EA%B8%B4%20%EC%84%A0%EC%9D%84%20%EC%82%AD%EC%A0%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
길이가 2048자를 초과하는 경우 줄을 어떻게 삭제합니까?
답변1
sed '/^.\{2048\}./d' input.txt > output.txt
답변2
2049자 이상의 문자가 포함된 줄을 삭제하는 방법은 다음과 같습니다.
sed '/.\{2049\}/d' <file.in >file.out
정규식은 .\{2049\}
2049자의 하위 문자열("최소 2049자"를 다르게 표현함)을 포함하는 모든 줄과 일치합니다. 이 d
명령은 입력에서 이를 제거하고 출력에 더 짧은 줄만 생성합니다.
BSD sed
(예: macOS)는 연산자에서 최대 256회까지만 반복 횟수를 처리할 수 있습니다( ; \{...\}
값은 셸 참조). 이러한 시스템에서는 다음을 사용할 수 있습니다.RE_DUP_MAX
getconf RE_DUP_MAX
awk
awk 'length <= 2048' <file.in >file.out
sed
문자 그대로 솔루션을 모방합니다 awk
.
awk 'length >= 2049 { next } { print }' <file.in >file.out
모든 구현 에서는 최대 바이트 길이의 레코드만 awk
처리할 수 있지만 ( 셸 참조) 더 긴 레코드를 지원할 수도 있습니다. macOS에서는 2048입니다.LINE_MAX
getconf LINE_MAX
LINE_MAX
답변3
perl -lne "length < 2048 && print" infile > outfile
답변4
위의 답변은 Mac OS X 10.9.5에서는 작동하지 않습니다.
아래 코드는 작동합니다.
sed '/.\{2048\}/d'
.
요구 사항은 없지만 참조로 제공됩니다. 다음 코드는 역으로 구현될 수 있습니다.
sed '/.\{2048\}/!d'
.