XY보다 긴 선을 삭제하는 방법은 무엇입니까?

XY보다 긴 선을 삭제하는 방법은 무엇입니까?

길이가 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_MAXgetconf RE_DUP_MAXawk

awk 'length <= 2048' <file.in >file.out

sed문자 그대로 솔루션을 모방합니다 awk.

awk 'length >= 2049 { next } { print }' <file.in >file.out

모든 구현 에서는 최대 바이트 길이의 레코드만 awk처리할 수 있지만 ( 셸 참조) 더 긴 레코드를 지원할 수도 있습니다. macOS에서는 2048입니다.LINE_MAXgetconf LINE_MAXLINE_MAX

답변3

perl -lne "length < 2048 && print" infile > outfile

답변4

위의 답변은 Mac OS X 10.9.5에서는 작동하지 않습니다.

아래 코드는 작동합니다.

sed '/.\{2048\}/d'.

요구 사항은 없지만 참조로 제공됩니다. 다음 코드는 역으로 구현될 수 있습니다.

sed '/.\{2048\}/!d'.

관련 정보