Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

Bash 문자열 조작 예 – 길이, 부분 문자열, 찾기 및 바꾸기

bash 셸에서 변수 이름 뒤에 달러 기호를 사용하면 셸이 해당 값으로 변수를 확장합니다. 쉘의 이 기능을 매개변수 확장이라고 합니다.

그러나 매개변수 확장에는 매개변수를 확장하고 값을 수정하거나 확장 프로세스에서 다른 값으로 대체할 수 있는 수많은 다른 형식이 있습니다. 이 기사에서는 문자열 조작 작업에 매개변수 확장 개념을 사용하는 방법을 검토합니다.

이 기사는 진행중인 bash 튜토리얼 시리즈의 일부입니다. bash { } 확장에 대한 이전 기사를 참조하십시오.

1. Bash Shell 스크립트 내에서 문자열 길이 식별

${#string}

위의 형식은 주어진 bash 변수의 길이를 얻는 데 사용됩니다.

$ cat len.sh
#! /bin/bash

var="Welcome to the geekstuff"

echo ${#var}

$ ./len.sh
24

bash 변수에 대한 자세한 내용은 6 실제 Bash 전역 및 지역 변수 예제를 참조하십시오.

2. Bash Shell 스크립트 내의 변수에서 부분 문자열 추출

Bash는 문자열에서 부분 문자열을 추출하는 방법을 제공합니다. 다음 예에서는 특정 위치에서 시작하여 n개의 문자를 구문 분석하는 방법을 설명합니다.

${string:position}

$position의 $string에서 부분 문자열 추출

<센터>
${string:position:length}

$position에서 시작하는 $string에서 문자 부분 문자열의 $length를 추출합니다. 아래 예에서 첫 번째 echo 문은 15번째 위치에서 시작하는 부분 문자열을 반환합니다. 두 번째 echo 문은 15번째 위치부터 4개의 문자를 반환합니다. 길이는 0보다 크거나 같은 숫자여야 합니다.

$ cat substr.sh
#! /bin/bash

var="Welcome to the geekstuff"

echo ${var:15}
echo ${var:15:4}

$ ./substr.sh
geekstuff
geek

또한 $*, $@, $#, $$, $!, $?, $-, $_ bash 특수 매개변수에 대한 자세한 내용은 이전 기사를 참조하십시오.

3. 최단 부분 문자열 일치

다음 구문은 $string

앞에서 $substring의 가장 짧은 일치 항목을 삭제합니다.
${string#substring}

다음 구문은 $string의 뒤에서 $substring의 가장 짧은 일치 항목을 삭제합니다.

${string%substring}

다음 샘플 셸 스크립트는 위의 두 가지 가장 짧은 부분 문자열 일치 개념을 설명합니다.

$ cat shortest.sh
#! /bin/bash

filename="bash.string.txt"

echo ${filename#*.}
echo ${filename%.*}

$ ./shortest.sh
After deletion of shortest match from front: string.txt
After deletion of shortest match from back: bash.string

첫 번째 echo 문에서 하위 문자열 '*.'는 문자 및 점과 일치하고 #은 문자열 앞부분에서 제거하므로 하위 문자열 "bash"를 제거합니다. filename이라는 변수에서. 두 번째 echo 문에서 부분 문자열 '.*'는 부분 문자열과 일치하며 점으로 시작하고 %는 문자열 뒤에서 제거하므로 부분 문자열 '.txt'를 삭제합니다.

4. 가장 긴 부분 문자열 일치

다음 구문은 $string

앞에서 가장 긴 $substring 일치 항목을 삭제합니다.
${string##substring}

다음 구문은 $string의 뒤에서 가장 긴 $substring 일치 항목을 삭제합니다.

${string%%substring}

다음 샘플 셸 스크립트는 위의 두 가지 가장 긴 부분 문자열 일치 개념을 설명합니다.

$ cat longest.sh
#! /bin/bash

filename="bash.string.txt"

echo "After deletion of longest match from front:" ${filename##*.}
echo "After deletion of longest match from back:" ${filename%%.*}

$ ./longest.sh
After deletion of longest match from front: txt
After deletion of longest match from back: bash

위의 예에서 ##*. "bash.string"과 일치하는 '*.'에 대해 가장 긴 일치 항목을 제거합니다. 따라서 이것을 스트라이프한 후 나머지 txt를 인쇄합니다. 그리고 %%.*는 뒤에서 ".string.txt"와 일치하는 .*에 대해 가장 긴 일치 항목을 제거하고, 스트라이프 후에는 "bash"를 반환합니다.

5. Bash Shell 스크립트 내에서 문자열 값 찾기 및 바꾸기

첫 번째 일치 항목만 교체

${string/pattern/replacement}

$string 변수의 패턴과 일치하고 패턴의 첫 번째 일치만 대체로 바꿉니다.

$ cat firstmatch.sh
#! /bin/bash

filename="bash.string.txt"

echo "After Replacement:" ${filename/str*./operations.}

$ ./firstmatch.sh
After Replacement: bash.operations.txt

모든 일치 항목 바꾸기

${string//pattern/replacement}

패턴의 모든 일치 항목을 교체로 바꿉니다.

$ cat allmatch.sh
#! /bin/bash

filename="Path of the bash is /bin/bash"

echo "After Replacement:" ${filename//bash/sh}

$ ./allmatch.sh
After Replacement: Path of the sh is /bin/sh

찾기 및 바꾸기에 대해서는 이전 기사인 sed 대체 예제 및 Vim 찾기 및 바꾸기를 참조하세요.

시작과 끝 바꾸기

${string/#pattern/replacement}

다음 구문은 패턴이 $string의 시작 부분과 일치하는 경우에만 대체 문자열로 바뀝니다.

${string/%pattern/replacement}

다음 구문은 주어진 $string의 끝에서 패턴이 일치하는 경우에만 대체 문자열로 대체됩니다.

$ cat posmatch.sh
#! /bin/bash

filename="/root/admin/monitoring/process.sh"

echo "Replaced at the beginning:" ${filename/#\/root/\/tmp}
echo "Replaced at the end": ${filename/%.*/.ksh}

$ ./posmatch.sh
Replaced at the beginning: /tmp/admin/monitoring/process.sh
Replaced at the end: /root/admin/monitoring/process.ksh

권장 도서

Bash 문자열 조작 예 – 길이, 부분 문자열, 찾기 및 바꾸기Bash 101 해킹, Ramesh Natarajan 작성 . 저는 대부분의 시간을 Linux 환경에서 보냅니다. 그래서 당연히 저는 Bash 명령줄과 셸 스크립팅의 열렬한 팬입니다. 15년 전, *nix의 다양한 버전을 작업할 때 C 셸과 Korn 셸에서 많은 코드를 작성했습니다. 나중에 시스템 관리자로 Linux 작업을 시작했을 때 Bash 셸 스크립팅을 사용하여 가능한 모든 작업을 거의 자동화했습니다. 내 Bash 경험을 바탕으로 Bash 명령줄과 셸 스크립팅 모두에 대한 101개의 실용적인 예제가 포함된 Bash 101 Hacks eBook을 작성했습니다. Bash를 마스터할 생각을 했다면 Bash 명령줄과 셸 스크립팅을 제어하는 ​​데 도움이 될 이 책을 읽어보세요.