비슷한 질문을 찾았습니다.
그런데 이 경우 내가 확인하고 싶은 것은 전체 길이가 아니라 줄의 자릿수이다. 예를 들어 다음 입력에서:
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
활용하는 것입니다 . 예를 들어 (taken ) 이렇게 할 수 있습니다.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
답변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
인쇄.