반달가면 이글루에서 백업 - 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
나다
'bash script' 카테고리의 다른 글
[bash: grep] 정규표현식에 사용되는 특수문자 (0) | 2023.07.03 |
---|---|
[bash: ${}] 셸 파라메터 확장(shell parameter expansion) (0) | 2023.06.30 |
[bash: awk] 특정 위치(field)에 대한 문자열 검색 (0) | 2023.06.29 |
[bash: date] 타임스탬프(timestamp)를 일반적인 표시 형식으로 변환 (0) | 2023.06.28 |
[bash: if, case] 문자열 비교 조건에 정규표현식 사용 (0) | 2023.06.28 |