길이를 기준으로 선 선택

길이를 기준으로 선 선택

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대체할 수 있습니다 .EP.\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 멀티바이트 문자 매핑만 지원합니다.

표시 너비를 기준으로 한 필터링은 또 다른 문제입니다. 주어진 문자열의 표시 너비는 표시 장치에 따라 다릅니다. 보다문자열의 표시 너비를 가져옵니다.이에 대해 자세히 알아보세요.

관련 정보