답변:
sed '/^.\{2048\}./d' input.txt > output.txt
sed: 1: "/^.\{2048\}..*/d": RE error: invalid repetition count(s)
(Mac OS X)
문자가 2049 개 이상인 행을 삭제하는 솔루션은 다음과 같습니다.
sed -E '/.{2049}/d' <file.in >file.out
표현식 /.{2049}/d
은 2049 자 이상을 포함하는 모든 행과 일치하고 입력에서이를 삭제하여 출력에서 더 짧은 행만 생성합니다.
를 사용하면 awk
길이가 2048 이하인 인쇄 라인 :
awk 'length <= 2048' <file.in >file.out
sed
말 그대로 솔루션을 모방 awk
:
awk 'length >= 2049 { next } { print }' <file.in >file.out
sed: 1: "/^.\{400,\}$/d": RE error: invalid repetition count(s)
(Mac OS X)
이와 같은 것이 Python에서 작동해야합니다.
of = open("orig")
nf = open("new",'w')
for line in of:
if len(line) < 2048:
nf.write(line)
of.close()
nf.close()
perl -lne "length < 2048 && print" infile > outfile
-l
그래도 필요하지 않습니다.
Warning: Use of "length" without parentheses is ambiguous at -e line 1. Unterminated <> operator at -e line 1.
length($_) > 2048 && print
. 어쨌든 length
바로 가기 length($_)
입니다.
Mac OS X 10.9.5에서는 위의 답변이 작동하지 않습니다.
다음 코드가 작동합니다.
sed '/.\{2048\}/d'
.
요청되지는 않았지만 참조 용으로 제공되었지만 다음 코드를 역으로 달성 할 수 있습니다.
sed '/.\{2048\}/!d'
.
sed: 1: "/.\{2048\}/d": RE error: invalid repetition count(s)
( Mac OS X, 10.10.4
)
gnu-sed를 사용하면 백 슬래시와 쉼표를 입력하여 열린 간격을 정의하지 않도록 -r 플래그를 사용할 수 있습니다.
sed -r "/.{2049,}/d" input.txt > output.txt
와:
간격의 경우 더 큰 패턴과 일치하지 않으려면 다음과 같은 라인 앵커가 필요합니다.
sed -r "/^.{32,64}$/d" input.txt > output.txt