grep
일부 패턴이 아닌 길이를 기준으로 선을 찾고 인쇄하는 데 적합한 도구를 사용하고 싶습니다 .
두 줄이 포함된 파일이 있다고 가정해 보겠습니다.
- 1행: 길이 = 300자
- 2행: 길이 = 120자
라인 2만 출력하는 명령을 찾고 있습니다.
답변1
정확히 120자
그리고 grep
:
grep -xE '.{120}' < your-file
grep -x '.\{120\}' < your-file # more portable
그리고 awk
:
awk 'length == 120' < your-file
0~120자
그리고 grep
:
grep -xE '.{0,120}' < your-file
grep -x '.\{0,120\}' < your-file # more portable
그리고 awk
:
awk 'length <= 120' < your-file
~을 위한엄밀히 말하면 120 미만, 120을 119 <=
또는 로 바꾸십시오 <
.
120자 이상:
그리고 grep
:
grep -E '.{120}' < your-file # lines that contain a sequence of 120 characters
grep '.\{120\}' < your-file # more portable
다른 옵션도 있습니다:
grep -E '^.{120}' < your-file # lines that start with a sequence of 120 characters
grep '^.\{120\}' < your-file # more portable
grep -xE '.{120,}' < your-file # lines that have 120 or more characters
# between start and end.
grep -x '.\{120,\}' < your-file # more portable
그리고 awk
:
awk 'length >= 120' < your-file
~을 위한엄격하게 120 이상, 120을 121 또는 >=
로 바꾸십시오 >
.
이는 입력이 로케일의 문자 맵에 따라 올바르게 인코딩된 유효한 텍스트라고 가정합니다. 입력에 NUL 문자, 유효한 문자를 형성하지 않는 바이트 시퀀스, 다음보다 큰 줄 LINE_MAX
(바이트 단위) 또는 무제한 마지막 줄( grep
다음의 경우 누락된 구분 기호가 추가됨)이 포함된 경우 마일리지가 줄어들 수 있습니다.awk
차이점.
문자 수가 아닌 바이트 수를 기준으로 필터링하려면 로캘을 C
또는 POSIX
( LC_ALL=C grep...
)로 설정합니다.
문자 대신 자소 클러스터 수를 기준으로 필터링하고 옵션을 grep
지원 하는 경우 위 의 및 를 -P
대체할 수 있습니다 .E
P
.
\X
비교하다:
$ locale charmap
UTF-8
$ echo $'e\u0301te\u0301' | grep -xP '\X{3}'
été
$ echo $'e\u0301te\u0301' | grep -xE '.{5}'
été
$ echo $'e\u0301te\u0301' | LC_ALL=C grep -xE '.{7}'
été
(즉, été
자소 클러스터 3개, 문자 5개, 7바이트).
grep -P
모든 구현에서 지원되지 는 않습니다 \X
. 일부는 UTF-8 멀티바이트 문자 매핑만 지원합니다.
표시 너비를 기준으로 한 필터링은 또 다른 문제입니다. 주어진 문자열의 표시 너비는 표시 장치에 따라 다릅니다. 보다문자열의 표시 너비를 가져옵니다.이에 대해 자세히 알아보세요.