[bash: expr] 특정 위치에서 특정 길이만큼 문자열 추출 리눅스 bash script

문자열의 특정 위치에서 특정 길이만큼의 부분 문자열을 추출하는 방법이다. expr의 substr 옵션을 사용하면 된다. 형식은 아래와 같다.

expr substr "문자열" [시작 위치] [길이]

시작 위치와 길이는 바이트 단위가 된다. 아래의 예시를 보자.

# 문자열 abcdefg의 2번째 바이트부터 5바이트 추출
expr substr "abcdefg" 2 5
bcdef

여러줄로 구성된 파일에 대해 위와 같은 작업을 하고 싶다면 xargs 명령을 조합하면 된다. 아래의 예시를 보자.

# 파일 내용 확인
cat test.txt
abcdefg
1234567
hijklmn

# test.txt 파일의 각 행의 2번째 바이트부터 5바이트 추출
cat test.txt | xargs -i expr substr {} 2 5
bcdef
23456
ijklm

cat 명령의 결과가 expr 인자의 중간에 들어가야 하므로 xargs에서 -i 옵션을 사용해야 된다는 점에 유의하자.

한글은 어떻게 될까? 리눅스에서 통상 UTF-8 인코딩을 사용하므로 3바이트가 한글자가 된다. 따라서 시작 위치와 길이를 지정할 때 한글 부분에 대해서는 이것을 고려해야 한다. 아래의 예시를 보자.

# 인코딩 확인
echo $LANG
en_US.UTF-8

# 문자열 "가나다라"에서 두번째 세번째 글자만 추출(4번째 바이트에서 시작해서 6바이트만큼 추출)
expr substr "가나다라" 4 6
나다



핑백

  • 반달가면 : [bash: ${}] 셸 파라메터 확장(shell parameter expansion) 2016-02-12 21:24:00 #

    ... d 변수나 하나의 문자열에 대해 사용할 경우 expr 명령의 substr 옵션을 이용한 문자열 추출보다 좀 더 깔끔하다. expr 관련 내용은 이전 게시물을 참고하자. 여기로 배열(array)을 사용할 때도 중괄호가 사용된다. 배열에 대한 내용은 이전 게시물을 참고하자. 여기로 ... more

  • 반달가면 : [bash: awk] 특정 위치(field)의 문자열에서 특정 길이 만큼 문자열 추출 2016-12-16 22:34:22 #

    ... 도 expr의 substr 옵션과 같은 기능을 하는 함수가 존재한다. 이름도 substr로 같다. (expr의 substr 옵션에 대한 내용은 이전 게시물을 참고하자. 여기로) substr 함수의 형식은 아래와 같다. 아래의 형식에서 문자열이 들어갈 자리에 $1, $2 등 위치(field) 변수를 지정해 주면 된다. substr("문 ... more

덧글

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

Google Analytics


B-Side


adsense(w160_h600)2

통계 위젯 (화이트)

39703
2864
1813372

ad_widget_2