bash script2023. 6. 30. 16:13

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/572562

 

문자열의 특정 위치에서 특정 길이만큼의 부분 문자열을 추출하는 방법이다. 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
나다

 

 

728x90
Posted by 반달가면