비슷한 질문을 찾았습니다.
하지만 이 경우에는 전체 길이가 아니라 줄의 자릿수를 확인하고 싶습니다. 예를 들어 다음 입력에서:
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
답변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
이 인쇄됩니다.