노트:이 질문은 이 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-regexp
GNU에서도 작동grep
) 전체 줄에 패턴 일치.
임의의 단일 문자\{3,10\}
이전 기호(있는 경우)의 3~10배를 양자화합니다.
답변2
사용 grep -E
:
grep -E '^.{3,10}$'
이는 3~10자로 구성된 행과 일치합니다.
답변3
다음을 사용합니다 awk
(GNU와 같은 로케일 인식 구현이라고 가정하면 awk
3자보다 짧은 멀티바이트 문자(예: "Ő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