주어진 범위에서 줄 길이를 "grep"하는 방법은 무엇입니까?

주어진 범위에서 줄 길이를 "grep"하는 방법은 무엇입니까?

노트:이 질문은 이 Q&A에 대한 보충 자료입니다.주어진 범위 내에 *없는* 행 길이를 찾기 위해 "grep"하는 방법은 무엇입니까?


길이 범위가 최소 3자 이상이지만 10자 이하인 텍스트 파일(줄 바꿈으로 구분된 단어 목록)에서 행을 가져와야 합니다.

예:

입력하다:

egyezményét
megkíván
ki
alma
kevesen
meghatározó

산출:

megkíván
alma
kevesen

질문:어떻게 해야 합니까 bash?

답변1

grep -x '.\{3,10\}'

어디

  • -x( --line-regexpGNU에서도 작동 grep) 전체 줄에 패턴 일치
  • .임의의 단일 문자
  • \{3,10\}이전 기호(있는 경우)의 3~10배를 양자화합니다.

답변2

사용 grep -E:

grep -E '^.{3,10}$'

이는 3~10자로 구성된 행과 일치합니다.

답변3

다음을 사용합니다 awk(GNU와 같은 로케일 인식 구현이라고 가정하면 awk3자보다 짧은 멀티바이트 문자(예: "Ők")가 있는 줄은 일치하지 않습니다).

LC_ALL=hu_HU.UTF-8 awk 'length >= 3 && length <= 10' file

기본적으로 이 length명령문은 (현재 레코드/행)의 길이를 반환하며 $0, 이는 코드에서 행의 길이가 지정된 범위 내에 있는지 테스트하는 데 사용됩니다. 해당 테스트에 해당하는 작업 블록이 없는 경우 기본 작업은 기록을 인쇄하는 것입니다.

주어진 데이터에 대해 테스트:

$ LC_ALL=hu_HU.UTF-8 awk 'length >= 3 && length <= 10' file
megkíván
alma
kevesen

펄과 유사:

$ LC_ALL=hu_HU.UTF-8 perl -C -lne '$l=length($_); print if ($l >= 3 && $l <= 10)' file
megkíván
alma
kevesen

답변4

나는 이것이 누군가에게 유용할 수 있다고 생각합니다. 확장하여 한 줄의 특정 문자열과 일치시키려는 경우다음보다 길지 않다255자를 가정해 보겠습니다. 이것이 해결책이 될 것입니다.

사용법: 문자열을 찾고 있지만 작성하지 않았거나 필요하지 않은 축소된 JS 파일과 같은 긴 줄을 제외하려는 경우

grep -x '.\{1,255\}theStringIWant.\{1,255\}'

특정 숫자(1과 255, 255와 1 또는 255와 255일 수 있음)를 초과하지 않도록 양쪽 끝의 길이를 실제로 제어할 수 없기 때문에 약간 해킹적이지만 대부분의 경우 긴 줄이 줄어드는 것을 방지합니다.

BASH 초보자를 위한 팁: \백슬래시는 중괄호의 이스케이프 문자입니다 {}.

예/증명:

echo "aaaalocalStoragebbbbccccdd" | grep -x '.\{3,10\}localStorage.\{3,10\}' #works
echo "aaaalocalStoragebbbbccccdddd" | grep -x '.\{3,10\}localStorage.\{3,10\}' #doesn't work, dddd puts end string to 12 chars

관련 정보