x개 이하의 숫자를 포함하는 줄만 유지하세요. TXT 파일

x개 이하의 숫자를 포함하는 줄만 유지하세요. TXT 파일

비슷한 질문을 찾았습니다.

하지만 이 경우에는 전체 길이가 아니라 줄의 자릿수를 확인하고 싶습니다. 예를 들어 다음 입력에서:

cdc85e24-b9e9-8802-080a-b84479e1ae82  
ekodeveloper0  
1795475824.1129747.1472396049615.ref  
1795475824.1129747.1472396049615  
967175540.1194446.1472407271491  
wangxiuyan552  
jveazey  
xoloki  
whelee  
matthauck  
patel3.anirudh  
mischa.salle  

N자리가 넘는 줄을 모두 삭제하려면 어떻게 해야 하나요?

답변1

질문에 태그를 달았으므로 Perl에서 이를 수행하는 한 가지 방법은 Perl이 대체된 문자 수를 반환한다는 perl사실을 활용하는 것입니다 . tr예를 들어 (을 사용하여 N = 13) 다음을 수행할 수 있습니다.

perl -ne 'print unless tr/[0-9]/[0-9]/ > 13' file
ekodeveloper0
wangxiuyan552
jveazey
xoloki
whelee
matthauck
patel3.anirudh
mischa.salle

보다 일반적인 방법은 스칼라 컨텍스트에서 정규식 일치를 평가하여 개수를 얻는 것입니다.

perl -ne '$c = () = /\d/g; print unless $c > 13' file

예를 들어 참조문자열에서 일치하는 항목 수를 계산하는 Perl 단축키가 있습니까?

답변2

X 또는숫자. 다음은 X가 13인 경우의 예입니다.

sed -n 's/[0-9]/&/13p' input.txt > output.txt

그러나 이를 수정하여 반대의 작업을 수행할 수 있습니다. 다음은 다음 줄만 유지하는 명령입니다.13개 미만숫자:

sed -n -e 's/[0-9]/&/13;t' -e 'p' input.txt > output.txt

설명 - 13개 이상의 숫자가 있는 줄만 인쇄합니다.

sed -n 's/[0-9]/&/13p' input.txt > output.txt

대체 텍스트의 기호 &는 "일치하는 모든 것"을 의미합니다.

명령 의 숫자 플래그 s(부분 뒤 /find/replace/)는 검색 패턴의 해당 인스턴스만 바꾸는 것을 의미합니다.

p명령 의 플래그는 " s대체가 이루어진 경우 인쇄"를 의미합니다.

-n물론 스위치는 Sed의 기본 "인쇄" 작업을 억제하는 것입니다 .

설명 - 숫자가 13개 미만인 행만 인쇄합니다.

sed -n -e 's/[0-9]/&/13;t' -e 'p' input.txt > output.txt

스위치 -e는 "실행"입니다. 단지 명령을 전달하는 것뿐입니다. 우리는 둘 이상을 통과하기 때문에 여기에 필요합니다.

마지막 명령이 대체를 수행 한 경우 명령 t은 나머지 명령을 건너뜁니다 .s

명령 p이 인쇄됩니다.

관련 정보