adsense_in_article_test


[bash: grep] 특정 길이의 문자열에 대한 검색 리눅스 bash script

정규표현(regular expression)을 이용하면 grep이나 sed에서 특정한 길이의 문자열에 대한 작업을 할 수 있다. 아래의 예시를 보자. my_file.txt 파일에서 영문 소문자로만 되고 길이가 5바이트(byte)인 행만 출력하는 경우이다.

cat my_file.txt | grep "^[a-z]\{5\}$"

중괄호({}) 안에 수자를 넣어서 바로 앞 표현이 얼만큼 반복되는지 지정할 수 있다. 중괄호가 shell에서 처리되는 것을 막고 grep 명령에 온전하게 인자로 전달되도록 역슬래시(\)로 보호해 준다. 중괄호를 이용한 반복 설정은 아래와 같다.

{n} 바로 앞의 항목이 정확히 n번 반복되는 경우
{n,} 최소 n번 이상 반복
{,m} 최대 m번 반복
{n,m} 최소 n번 이상, 최대 m번 반복

예시를 하나 더 보자. my_file.txt에서 영문 대소문자로 된 5바이트 이상 10바이트 이하 문자열이 있는 행만 출력하는 경우이다.

cat my_file.txt | grep "[[:alpha:]]\{5,10\}"

이 기능을 이용해서 2개 이상의 문자열이 동시에 포함된 행을 골라낼 수도 있다. 예를 들어 한 행에 abc와 def가 모두 있으면서 abc가 나온 후에 def가 나오는 문자열이 있는 부분을 찾는 경우이다. 아래의 예시를 보자.

cat my_file.txt | grep "abc[[:print:]]\{0,\}def"

위의 예시에서 grep 명령의 인자를 해석해 보자면, 문자열 abc 이후에 출력 가능한 문자([[:print:]])가 0번 이상(\{0,\}) 나온 후에 def가 나오는 경우를 찾아서 출력하라는 것이다.

2개 이상의 문자열이 동시에 포함된 행을 찾는 경우는 grep 명령을 파이프(|)로 연결하여 연속해서 사용할 수도 있다.

cat my_file.txt | grep "abc" | grep "def"

그러나, -v 옵션을 통해서 2개 이상의 문자열이 동시에 포함된 행을 제외하는 경우는 중괄호를 사용해야 한다.

# 검색한 문자열이 포함된 행을 제외(-v 옵션)
cat my_file.txt | grep -v "abc[[:print:]]\{0,\}def"

grep 명령에 대한 다른 게시물들은 여기로



핑백

  • 반달가면 : [bash: grep] 여러개의 문자열이 특정 순서로 나오는 행 찾기 2015-11-06 20:21:15 #

    ... ile.txt | grep "abc.*def.*xyz" 와일드카드 대신에 문자열 길이를 지정하는 방식도 이용할 수 있다. 좀 더 자세한 내용은 이전 게시물을 참고하자. 여기로 # abc 다음에 임의의 문자가 최소 0번 이상 출현한 후에 def 출현 cat my_file.txt | grep "abc.\{0,\}def" 순서와 무관하게 ... more

  • 반달가면 : [bash: grep] 파일 안에 섞인 바이너리(binary) 데이터 제거 2018-04-20 20:46:03 #

    ... 용되는 경우가 아님을 명확히 하기 위해 공백 다음에 위치시켰다. 탭은 별도의 변수 tab에 할당하여 정규표현식에 추가. 정규표현식 바로 다음에 \{1,\} 부분은 1개 이상 연속될 경우 출력하라는 의미이다. 문자열 중간에 바이너리 데이터가 있을 경우 grep의 -o 옵션에 따라 줄바뀜이 발생하므로, 임시 파일에 저장된 결과를 다시 한줄 ... more

덧글

댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.


B-Side


adsense(w160_h600)2

통계 위젯 (화이트)

249487
4519
2080388

2019 대표이글루_IT

Google Analytics