Bash에서 문자열 분할

Fumbani Banda 2023년1월30일
  1. tr 명령을 사용하여 Bash에서 문자열 분할
  2. IFS를 사용하여 Bash에서 문자열 분할
  3. read 명령을 사용하여 Bash에서 문자열 분할
  4. 매개변수 확장을 사용하여 Bash에서 문자열 분할
  5. cut 명령을 사용하여 Bash에서 문자열 분할
Bash에서 문자열 분할

이 튜토리얼은 tr 명령, IFS, read 명령, 매개변수 확장 및 cut 명령을 사용하여 bash의 구분 기호에서 문자열을 분할하는 방법을 보여줍니다.

tr 명령을 사용하여 Bash에서 문자열 분할

tr 명령은 translate의 약어입니다. 표준 입력에서 문자를 번역, 삭제 및 압축하고 결과를 표준 출력에 씁니다.

명령줄이나 bash 스크립트에서 텍스트를 조작하는 데 유용한 명령입니다. 반복되는 문자를 제거하고 소문자를 대문자로 변환하고 문자를 바꿀 수 있습니다.

아래 bash 스크립트에서 echo 명령은 문자열 변수 $addrstr 명령으로 파이프하여 - 구분 기호로 문자열 변수를 분할합니다. 문자열이 분할되면 값이 IP 변수에 할당됩니다.

그런 다음 for 루프는 $IP 변수를 반복하고 echo 명령을 사용하여 모든 값을 출력합니다.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"

IP=$(echo $addrs | tr "-" "\n")

for ip in $IP
do
    echo "$ip"
done

아래 출력은 $addr 문자열 변수가 구분 기호 -에서 4개의 개별 문자열로 분할되었음을 보여줍니다.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

IFS를 사용하여 Bash에서 문자열 분할

IFS는 내부 필드 구분 기호를 나타냅니다.

IFS는 확장 후 단어 분할 및 내장 read 명령으로 줄을 단어로 분할하는 데 사용됩니다. IFS의 값은 쉘이 단어 경계를 인식하는 방법을 알려줍니다.

IFS의 기본값은 공백, 탭 및 새 줄입니다. 아래 스크립트에서 IFS의 원래 값은 OIFS 변수에 저장되었으며 새 IFS 값은 -로 설정되었습니다.

이것은 쉘이 -를 새 단어 경계로 취급해야 함을 의미합니다. 쉘은 -에서 문자열 변수 addrs를 분할하고 ips 변수에 새 값을 할당합니다.

그런 다음 for 루프는 $ips 변수를 반복하고 echo 명령을 사용하여 모든 값을 출력합니다.

IFS=$OIFSIFS 변수의 원래 값을 복원하는 데 사용되며 unset OIFS는 추적하는 변수 목록에서 변수 OIFS를 제거하도록 쉘에 지시합니다.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"

OIFS=$IFS
IFS='-'

ips=$addrs
for ip in $ips
do
    echo "$ip"
done
IFS=$OIFS
unset OIFS

아래 출력은 $addr 문자열 변수가 구분 기호 -에서 4개의 개별 문자열로 분할되었음을 보여줍니다.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

read 명령을 사용하여 Bash에서 문자열 분할

read 명령은 Linux 시스템에 내장된 명령입니다.

라인의 내용을 변수로 읽는 데 사용됩니다. 또한 쉘 변수에 할당된 문자열의 단어를 분할합니다.

변수 $addrs 문자열은 아래 스크립트의 read 명령에 전달됩니다. IFS는 문자열 변수에서 단어 경계 역할을 하는 구분 기호를 설정합니다.

이것은 -가 우리의 경우 단어 경계임을 의미합니다. -a 옵션은 read 명령에 배열로 분할된 단어를 저장하도록 지시하고 -r 옵션은 read 명령에 이스케이프 문자를 있는 그대로 처리하고 해석하지 않도록 지시합니다.

분할된 단어는 IP 배열에 저장됩니다. for 루프는 $IP 배열을 반복하고 echo 명령을 사용하여 모든 값을 출력합니다.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"


IFS='-' read -ra  IP <<< "$addrs"
for ip in "${IP[@]}";
do
    echo "$ip"
done

아래 출력에서 ​​$addr 문자열 변수가 구분 기호 -에서 별도의 4개 문자열로 분할되었음을 알 수 있습니다.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

매개변수 확장을 사용하여 Bash에서 문자열 분할

아래 스크립트는 매개변수 확장을 사용하여 문자를 검색하고 대체합니다. 매개변수 확장에 사용되는 구문은 ${variable//search/replace}입니다. 이것은 variable에서 search와 일치하는 패턴을 검색하고 replace로 대체합니다.

이 경우 스크립트는 - 패턴을 검색하여 공백으로 바꿉니다. ${addrs//-/ } 주위의 괄호는 ip_array라는 새 문자열의 배열을 정의하는 데 사용됩니다.

for 루프를 사용하여 모든 ip_array 변수 요소를 반복하고 echo 명령을 사용하여 표시합니다.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"


ip_array=(${addrs//-/ })
for ip in "${ip_array[@]}"
do
    echo "$ip"
done

아래 출력은 ip_array의 모든 요소를 ​​보여줍니다.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

인덱스를 전달하여 ip_array 변수의 개별 요소에 액세스할 수 있습니다. 아래 스크립트에서 배열의 첫 번째 요소를 참조하기 위해 인덱스 0을 전달했습니다.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"


ip_array=(${addrs//-/ })
printf "${ip_array[0]}\n"

출력은 ip_array의 첫 번째 요소를 보여줍니다.

192.168.8.1

cut 명령을 사용하여 Bash에서 문자열 분할

아래 스크립트는 cut 명령을 사용하여 부분 문자열을 추출합니다. -d 옵션은 문자열을 필드로 나누는 데 사용할 구분 기호를 지정하고 -f 옵션은 추출할 필드의 번호를 설정합니다.

그러나 우리의 경우에는 -를 구분자로 사용하여 문자열을 나눕니다. 첫 번째 필드에 액세스하기 위해 1 인수를 -f 옵션에 전달하고 동일한 작업을 통해 두 번째 필드에 액세스합니다. 2-f 옵션에 전달합니다.

값은 각각 ip_oneip_two 변수에 할당됩니다. printf 명령은 변수 값을 표시하는 데 사용됩니다.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"


ip_one=$(echo $addrs | cut -d '-' -f 1)
ip_two=$(echo $addrs | cut -d '-' -f 2)

printf "$ip_one\n$ip_two\n"

아래 출력은 $addrs 문자열 변수에서 분할된 첫 번째 및 두 번째 문자열을 표시합니다.

192.168.8.1
192.168.8.2
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

관련 문장 - Bash String