Linux에서 Bash 문자열에 하위 문자열이 포함되어 있는지 확인하는 방법

Linux에서 Bash 문자열에 하위 문자열이 포함되어 있는지 확인하는 방법

때때로 Linux 스크립팅에서 텍스트 문자열에 더 작은 특정 문자열이 포함되어 있는지 알아야 합니다. 이를 수행하는 방법에는 여러 가지가 있습니다. 우리는 당신에게 몇 가지 간단하고 신뢰할 수 있는 방법을 보여줄 것입니다.

왜 유용한가요?

일반적인 요구 사항은 문자열에서 더 작은 부분 문자열을 찾는 것입니다. 한 가지 예는 파일이나 사람의 입력에서 텍스트를 읽고 문자열에서 특정 부분 문자열을 찾아 스크립트가 다음에 무엇을 할지 결정할 수 있도록 하는 것입니다. 이것은 구성 파일의 장치 레이블 또는 이름 조회이거나 사용자 입력 행의 명령행 조회일 수 있습니다.

Linux 사용자에게는 텍스트 작업을 위한 많은 유틸리티가 부여됩니다. 그 중 일부는 Bash 셸에 내장되어 있고 다른 일부는 별도의 유틸리티 또는 응용 프로그램으로 제공됩니다. Unix 파생 운영 체제가 문자열 조작 기능을 풍부하게 갖춘 데는 이유가 있습니다.

파일로 보이는 일부 항목은 파일이 아닙니다. 하드웨어 장치 및 시스템 정보 소스와 같은 것을 나타내는 특수 파일입니다. 운영 체제에서 수행하는 추상화는 파일의 모양과 특성을 제공합니다. 물론 텍스트로 정보를 읽을 수 있고 어떤 경우에는 쓰기도 하지만 일반 파일은 아닙니다.

텍스트는 터미널 창에서 명령의 입력 및 출력으로도 사용됩니다. 이를 통해 입력 및 출력 데이터를 리디렉션하고 전달할 수 있습니다. 이 기능은 한 명령의 출력을 다음 명령의 입력으로 전달하여 Linux 명령 시퀀스를 함께 묶는 기능의 기초가 됩니다.

출처에 관계없이 수신된 텍스트에서 의미 있는 단어, 명령, 레이블 또는 기타 표시기를 검색하는 것은 텍스트 데이터 작업의 표준 부분입니다. 다음은 자신의 스크립트에 통합할 수 있는 간단한 트릭입니다.

Bash 내장 함수로 부분 문자열 찾기

이중 대괄호 ” “로 묶인 문자열 비교 테스트는 문에서 한 문자열에 다른 문자열이 포함되어 있는지 확인하는 [[...]]데 사용할 수 있습니다 .if

이 스크립트를 편집기에 복사하고 “double.sh”라는 파일에 저장합니다.

#!/bin/bash

if [[ “원숭이”= *”키”* ]]; 그 다음에

echo “키가 원숭이에 있습니다”

또 다른

echo “키가 원숭이에 없습니다”

fi

명령 을 사용하여 스크립트를 실행 가능하게 만들어야 합니다 chmod. 이것은 모든 스크립트를 실행 가능하게 만들기 위해 항상 필요한 단계입니다. 스크립트 파일을 생성할 때마다 이 작업을 수행해야 합니다. 각 경우에 적절한 스크립트 이름으로 대체하십시오.

chmod +x double.sh

chmod로 실행 가능한 스크립트 파일 생성

스크립트를 실행해 봅시다.

./double.sh

double.sh 스크립트 실행

별표 ” *“는 문자가 없는 것을 포함하여 모든 문자 시퀀스를 나타내기 때문에 작동합니다. 하위 문자열 “key”가 대상 문자열에 있고 그 앞뒤에 문자가 있거나 없는 경우 테스트는 true를 반환합니다.

이 예에서 하위 문자열 앞에 문자가 옵니다. 첫 번째 별표에 해당합니다. 하위 문자열 뒤에는 문자가 없지만 별표도 어떤 문자와도 일치하지 않으므로 테스트는 여전히 통과합니다.

유연성을 위해 리터럴 문자열이 아닌 변수를 처리하도록 스크립트를 수정할 수 있습니다. 이것은 “double2.sh” 스크립트입니다.

#!/bin/bash

string=”원숭이”

하위 문자열=”키”

if [[ $문자열 = *$하위문자열* ]]; 그 다음에

echo “$string에서 $substring이 발견되었습니다”

또 다른

echo “$string에서 $substring을 찾을 수 없습니다”

fi

어떻게 작동하는지 봅시다.

./double2.sh

double2.sh 스크립트 실행

동일한 방식으로 작동하며 리터럴 문자열 대신 변수 이름을 사용할 수 있다는 장점이 있습니다. 우리의 작은 솔루션을 기능으로 바꾸는 것이 가장 큰 유연성을 제공할 것입니다.

이것은 “double3.sh” 스크립트입니다.

#!/bin/bash

shopt -s nocasematch

string=”원숭이”

하위 문자열=”키”

Capital=”런던”

check_substring()

{

if [[ $1 = *$2* ]]; 그 다음에

echo “$1에서 $2를 찾았습니다.”

또 다른

echo “$1에서 $2을(를) 찾을 수 없습니다”

파이

}

check_substring “원숭이””키”

check_substring $string $substring

check_substring $string “바나나”

check_substring "Wales"$capital

check_substring변수와 리터럴 문자열의 조합을 사용하여 함수를 호출합니다 . (set) 옵션 shopt 과 함께 사용 하여 대소문자를 구분하지 않는 일치 항목을 설정했습니다.-snocasematch

작동 방식은 다음과 같습니다.

./double3.sh

double3.sh 스크립트 실행

case연산자 에서 부분 문자열 주위에 별표를 사용할 수도 있습니다 . “case.sh”입니다.

#!/bin/bash

shopt -s nocasematch

string=”왈라비”

하위 문자열=”벽”

케이스 $string

*$하위 문자열*)

echo “$string에서 $substring이 발견되었습니다”

;;

*)

echo “일치하는 항목 없음: $string”

;;

esac

case매우 긴 문 대신 문을 사용 if하면 스크립트를 더 쉽게 읽고 디버그할 수 있습니다. 문자열에 가능한 많은 하위 문자열 중 하나가 포함되어 있는지 확인해야 하는 경우 case연산자가 최선의 선택입니다.

./case.sh

case.sh 스크립트 실행

하위 문자열을 찾았습니다.

grep으로 부분 문자열 찾기

Bash의 내장 기능 외에도 가장 먼저 필요한 텍스트 검색 도구는 grep. grep문자열 내에서 문자열을 검색하여 하위 문자열을 찾는 타고난 기능을 사용할 수 있습니다 .

이 스크립트를 “subgrep.sh”라고 합니다.

#!/bin/bash

string=”죽 냄비”

하위 문자열=”릿지”

if $(echo $string | grep -q $substring); 그 다음에

echo “$string에서 $substring이 발견되었습니다”

또 다른

echo “$string에서 $substring을 찾을 수 없습니다”

fi

스크립트는 하위 문자열을 찾는 에 echo문자열을 보내는 데 사용합니다. (quiet) 옵션을 grep사용 하여 stdout에 아무 것도 쓰지 않습니다.-q grep

대괄호 ” (...)” 안의 명령을 실행한 결과가 0이면 일치하는 항목이 발견되었음을 의미합니다. trueBash에서는 0이 일치 if하므로 문이 충족되고 then절이 실행됩니다.

그의 출력이 무엇인지 봅시다.

./subgrep.sh

subgrep.sh 스크립트 실행

sed로 부분 문자열 찾기

sed하위 문자열을 검색하는 데 사용할 수도 있습니다 .

기본적으로 sed는 입력된 모든 텍스트를 인쇄합니다. 사용 sed -n하면 이를 방지할 수 있습니다. 일치하는 라인만 인쇄됩니다. 이 표현식은 $substring 값과 일치하거나 포함하는 모든 행을 인쇄합니다.

"/$substring/p"

여기서 리디렉션 사용 에 값 $string을 전달합니다 . 이것은 현재 셸의 명령으로 값을 리디렉션하는 데 사용됩니다. 채널처럼 서브쉘을 호출하지 않습니다.sed<<<

첫 번째 -n는 테스트입니다. true명령 의 출력 sed이 0이 아닌 경우 반환 됩니다. 출력이 null이 아닐 수 있는 유일한 방법은 sed일치하는 문자열을 찾는 것입니다. 그렇다면 $substring에서 찾아야 합니다 $string.

이것은 “subsed.sh”입니다.

#!/bin/bash

string=”스웨덴”

하위 문자열 = “에덴”

if [ -n “$(sed -n “/$substring/p”<<< $string)”]; 그 다음에

echo “$string에서 $substring이 발견되었습니다”

또 다른

echo “$string에서 $substring을 찾을 수 없습니다”

fi

스크립트를 실행할 때 예상되는 응답을 받습니다.

./subsed.sh

subsed.sh 스크립트 실행

$substring비교가 실패하도록 값을 편집하여 스크립트의 논리를 테스트할 수 있습니다 .

./subsed.sh

일치하지 않는 하위 문자열로 subsed.sh 스크립트 실행

그만 찾아, 찾았어

다른 도구는 awk및 와 같은 하위 문자열을 찾을 수 Perl있지만 하위 문자열 검색과 같은 간단한 사용 사례는 추가된 기능이나 추가된 복잡성을 보장하지 않습니다. 특히 Bash의 내장 함수를 사용하여 하위 문자열을 찾는 것은 빠르고 간단하며 외부 도구가 필요하지 않습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다