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

0
133

bash 프롬프트를 표시하는 Linux 노트북
Fatmawati achmad zaenuri/Shutterstock.com

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

이것이 유용한 이유는 무엇입니까?

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

Linux 사용자는 텍스트 조작을 위한 여러 유틸리티를 사용할 수 있습니다. 일부는 Bash 셸에 내장되어 있고 다른 일부는 독립 실행형 유틸리티 또는 응용 프로그램으로 제공됩니다. Unix 파생 운영 체제에 문자열 조작 기능이 풍부하게 제공되는 이유가 있습니다.

Linux의 Bash에서 문자열을 조작하는 방법

관련된Linux의 Bash에서 문자열을 조작하는 방법

파일로 보이는 일부 항목은 단순한 파일이 아닙니다. 그들은 특수 파일 하드웨어 장치 및 시스템 정보 소스와 같은 것을 나타냅니다. 운영 체제에서 수행하는 추상화는 파일의 모양과 특성을 제공합니다. 자연스럽게 텍스트로 정보를 읽을 수 있고 경우에 따라 쓰기도 하지만 일반 파일은 아닙니다.

텍스트는 터미널 창에서 명령의 입력 및 출력으로도 사용됩니다. 이를 통해 입력 및 출력의 리디렉션 및 파이핑이 가능합니다. 이 기능은 Linux 명령 시퀀스를 함께 연결하여 한 명령의 출력을 다음 명령의 입력으로 전달하는 기능을 뒷받침합니다.

출처에 관계없이 중요한 단어, 명령, 레이블 또는 기타 지표에 대해 수신한 텍스트를 검색하는 것은 텍스트 기반 데이터를 처리하는 표준 부분입니다. 다음은 자신의 스크립트에 포함할 수 있는 간단한 기술 모음입니다.

Bash 내장으로 부분 문자열 찾기

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

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

#!/bin/bash

if [[ "monkey" = *"key"* ]]; then
  echo "key is in monkey"
else
  echo "key is not in monkey"
fi
Linux에서 이중 괄호 조건부 테스트를 사용하는 방법

관련된Linux에서 이중 괄호 조건부 테스트를 사용하는 방법

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

chmod +x double.sh

chmod로 스크립트를 실행 가능하게 만들기

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

./double.sh

double.sh 스크립트 실행

별표 ” 때문에 작동합니다. * “는 문자가 없는 것을 포함하여 일련의 문자를 나타냅니다. 하위 문자열 “key”가 대상 문자열 내에 있으면 앞뒤에 문자가 있거나 없는 경우 테스트에서 true를 반환합니다.

이 예에서는 부분 문자열 앞에 문자가 있습니다. 이들은 첫 번째 별표와 일치합니다. 하위 문자열 뒤에는 문자가 없지만 별표도 문자와 일치하지 않기 때문에 테스트는 여전히 통과합니다.

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

#!/bin/bash

string="Monkey"
substring="key"

if [[ $string = *$substring* ]]; then
  echo "$substring was found in $string"
else
  echo "$substring was not found in $string"
fi

어떻게 실행되는지 봅시다.

./double2.sh

double2.sh 스크립트 실행

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

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

#!/bin/bash

shopt -s nocasematch

string="Monkey"
substring="Key"
capital="London"

check_substring ()
{
if [[ $1 = *$2* ]]; then
  echo "$2 was found in $1"
else
  echo "$2 was not found in $1"
fi
}

check_substring "Monkey" "key" 
check_substring $string $substring
check_substring $string "banana"
check_substring "Wales" $capital

우리는 우리의 check_substring 변수와 리터럴 문자열을 혼합하여 사용하는 함수. 우리는 사용했었다 shopt 그것의 -s (set) 옵션을 설정할 수 있습니다. nocasematch일치 항목을 대소문자를 구분하지 않도록 합니다.

실행 방법은 다음과 같습니다.

./double3.sh

double3.sh 스크립트 실행

부분 문자열을 별표로 묶는 트릭을 사용할 수 있습니다. case 진술도. “case.sh”입니다.

#!/bin/bash

shopt -s nocasematch

string="Wallaby"
substring="Wall"

case $string in

  *$substring*)
    echo "$substring was found in $string"
    ;;

  *)
    echo "Nothing matched: $string"
    ;;
esac

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

./case.sh

case.sh 스크립트 실행

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

grep으로 부분 문자열 찾기

Bash 내장 기능 외에도 가장 먼저 도달하게 될 텍스트 검색 도구는 다음과 같습니다. grep. 우리는 사용할 수 있습니다 grep문자열 내에서 문자열을 검색하여 하위 문자열을 찾는 의 타고난 능력입니다.

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

#!/bin/bash

string="porridge pot"
substring="ridge"

if $(echo $string | grep -q $substring); then
  echo "$substring was found in $string"
else
  echo "$substring was not found in $string"
fi

스크립트 사용 echo 문자열을 보내기 위해 grep, 하위 문자열을 검색합니다. 우리는 사용하고 있습니다 -q (조용한) 중지 옵션 grep 표준 출력에 무엇이든 쓰기.

Linux에서 grep 명령을 사용하는 방법

관련된Linux에서 grep 명령을 사용하는 방법

괄호 안의 명령 결과가 “(...)“가 0이면 일치하는 항목이 발견되었음을 의미합니다. 0은 다음과 같기 때문에 true 배쉬에서는 if 진술이 만족되고 then 조항이 실행됩니다.

출력이 무엇인지 봅시다.

./subgrep.sh

subgrep.sh 스크립트 실행

sed로 부분 문자열 찾기

우리는 사용할 수 있습니다 sed 하위 문자열을 찾기도 합니다.


기본적으로, sed 입력되는 모든 텍스트를 인쇄합니다. 사용 sed -n 이것을 방지합니다. 인쇄되는 유일한 라인은 일치하는 라인입니다. 이 표현식은 $substring 값과 일치하거나 포함하는 모든 행을 인쇄합니다.

"/$substring/p"

우리는 가치를 공급합니다 $string ~ 안으로 sed 여기 리디렉션을 사용하여 <<<. 이것은 현재 쉘의 명령으로 값을 리디렉션하는 데 사용됩니다. 파이프와 같은 방식으로 서브쉘을 호출하지 않습니다.

Linux에서 sed 명령을 사용하는 방법

관련된Linux에서 sed 명령을 사용하는 방법

첫번째 -n 시험이다. 그것은 돌아올 것이다 true 의 출력인 경우 sed 명령은 0이 아닙니다. 에서 출력되는 유일한 방법 sed 일치하는 라인이 발견된 경우 0이 아닐 수 있습니다. 그렇다면, $substring 에서 발견되었을 것입니다. $string.

“subsed.sh”입니다.

#!/bin/bash

string="Sweden"
substring="eden"

if [ -n "$(sed -n "/$substring/p" <<< $string)" ]; then
  echo "$substring was found in $string"
else
  echo "$substring was not found in $string"
fi

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

./subsed.sh

subsed.sh 스크립트 실행

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

./subsed.sh

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

검색 중지, 찾았습니다

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

관련된: Bash 스크립트에서 Case 문을 사용하는 방법