Bash에서 문자열 분할
-
tr
명령을 사용하여 Bash에서 문자열 분할 -
IFS
를 사용하여 Bash에서 문자열 분할 -
read
명령을 사용하여 Bash에서 문자열 분할 - 매개변수 확장을 사용하여 Bash에서 문자열 분할
-
cut
명령을 사용하여 Bash에서 문자열 분할
이 튜토리얼은 tr
명령, IFS
, read
명령, 매개변수 확장 및 cut
명령을 사용하여 bash의 구분 기호에서 문자열을 분할하는 방법을 보여줍니다.
tr
명령을 사용하여 Bash에서 문자열 분할
tr
명령은 translate
의 약어입니다. 표준 입력에서 문자를 번역, 삭제 및 압축하고 결과를 표준 출력에 씁니다.
명령줄이나 bash 스크립트에서 텍스트를 조작하는 데 유용한 명령입니다. 반복되는 문자를 제거하고 소문자를 대문자로 변환하고 문자를 바꿀 수 있습니다.
아래 bash 스크립트에서 echo
명령은 문자열 변수 $addrs
를 tr
명령으로 파이프하여 -
구분 기호로 문자열 변수를 분할합니다. 문자열이 분할되면 값이 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=$OIFS
는 IFS
변수의 원래 값을 복원하는 데 사용되며 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_one
및 ip_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