셸 문자열 캡처의 구현 방법 (매우 상세)

셸 캡처 문자열은 일반적으로 두 가지 방법이 있습니다. 지정한 위치부터 캡처하고 지정한 문자열(하위 문자열)부터 캡처합니다.

지정된 위치부터 캡처하기


이 방식은 두 개의 매개 변수가 필요합니다. 시작 위치를 지정하는 것 외에 길이를 캡처해야 캡처할 문자열을 최종적으로 확정할 수 있습니다.
시작 위치를 지정해야 하기 때문에 계수 방향과 관련된 문제입니다. 문자열 왼쪽부터 계수할 것인가, 아니면 문자열 오른쪽부터 계수할 것인가.정답은 셸이 두 가지 계수 방식을 동시에 지원한다는 것이다.

1) 문자열 왼쪽부터 카운트


문자열의 왼쪽에서 숫자를 계산하려면 문자열의 구체적인 형식은 다음과 같습니다.

${string: start :length}
그 중에서string은 캡처할 문자열이고 start는 시작 위치(왼쪽부터, 0부터 계수)이며 length는 캡처할 길이입니다. (생략하면 문자열의 끝까지 표시됩니다.)
예:

url="jb51.net"
echo ${url: 2: 9}
결과는 Biancheng입니다.
또한 다음과 같습니다.

url="jb51.net"
echo ${url: 2} #  length, 
결과는 biancheng.net.

2) 오른쪽부터 카운트


문자열의 오른쪽부터 숫자를 계산하려면 문자열의 구체적인 형식은 다음과 같습니다.

${string: 0-start :length}
1) 형식에 비해 2) 형식은 0보다 겨우 많은데 이것은 고정된 쓰기 방법으로 문자열 오른쪽부터 계산하는 것을 나타내는 데 쓰인다.
여기서 강조해야 할 점은 다음과 같습니다.
  • 왼쪽에서 숫자를 계산할 때 시작 숫자는 0(프로그래머의 사고에 부합됨)이다.오른쪽부터 계산할 때 시작 숫자는 1이다.계수 방향이 다르고 시작 숫자도 다르다
  • 어느 쪽부터 계산하든 캡처 방향은 왼쪽에서 오른쪽으로..
  • 예:
    
    url="jb51.net"
    echo ${url: 0-13: 9}
    
    결과는 Biancheng입니다.오른쪽에서 b는 13글자입니다.
    또한 다음과 같습니다.
    
    url="jb51.net"
    echo ${url: 0-13} #  length, 
    
    결과는 biancheng.net.

    지정한 문자열부터 캡처하기


    이 절취 방식은 문자열의 길이를 지정할 수 없으며, 지정된 문자열 (하위 문자열) 에서 문자열의 끝까지 절취할 수 있습니다.셸은 지정된 문자열(하위 문자열) 오른쪽의 모든 문자를 캡처하거나 왼쪽의 모든 문자를 캡처할 수 있습니다.

    1) # 번호를 사용하여 오른쪽 문자 자르기


    # 번호를 사용하여 지정된 문자열 (또는 하위 문자열) 의 오른쪽에 있는 모든 문자를 다음과 같이 캡처할 수 있습니다.
    
    ${string#*chars}
    
    그 중에서string은 캡처할 문자를 표시하고,chars는 지정한 문자열(또는 하위 문자열), *는 어댑터의 일종으로 임의의 길이를 표시하는 문자열입니다. *chars 연결은 왼쪽의 모든 문자를 무시하고 chars를 만날 때까지 사용합니다.
    다음 예제를 참조하십시오.
    
    url="http://jb51.net/index.html"
    echo ${url#*:}
    
    결과는//jb51입니다.net/index.html.
    다음 글도 같은 결과를 얻을 수 있습니다.
    
    echo ${url#*p:}
    echo ${url#*ttp:}
    
    chars의 왼쪽 문자를 무시할 필요가 없으면 *를 사용하지 않을 수도 있습니다. 예를 들면:
    
    url="http://jb51.net/index.html"
    echo ${url#http://}
    
    결과는 jb51입니다.net/index.html.
    위의 쓰기 방법은 첫 번째 일치하는 문자열 (하위 문자열) 을 만나면 끝납니다.예:
    
    url="http://jb51.net/index.html"
    echo ${url#*/}
    
    결과는/jb51입니다.net/index.html.URL 문자열에 세 개의/가 있습니다. 출력 결과 셸이 첫 번째/를 만났을 때 일치하는 것이 끝났습니다.
    마지막 지정한 문자열 (하위 문자열) 이 끝날 때까지 일치하려면 # # 을 사용할 수 있습니다.
    
    ${string##*chars}
    
    다음 예제를 참조하십시오.
    
    #!/bin/bash
    url="http://jb51.net/index.html"
    echo ${url#*/}  #  /jb51.net/index.html
    echo ${url##*/}  #  index.html
    str="---aa+++aa@@@"
    echo ${str#*aa}  #  +++aa@@@
    echo ${str##*aa} #  @@@
    

    2)% 를 사용하여 왼쪽 문자 자르기


    % 번호를 사용하여 지정된 문자 (또는 하위 문자열) 의 왼쪽에 있는 모든 문자를 캡처할 수 있습니다. 형식은 다음과 같습니다.
    
    ${string%chars*}
    
    * 의 위치를 주의하십시오. chars 왼쪽의 문자를 캡처하고 chars 오른쪽의 문자를 무시하기 때문에 *는 chars 오른쪽에 있어야 합니다.다른 측면에서% 와 # 의 사용법은 동일합니다. 여기서 더 이상 설명하지 않고 예를 들어 설명하십시오.
    
    #!/bin/bash
    url="http://jb51.net/index.html"
    echo ${url%/*} #  http://jb51.net
    echo ${url%%/*} #  http:
    str="---aa+++aa@@@"
    echo ${str%aa*} #  ---aa+++
    echo ${str%%aa*} #  ---
    

    총결산


    마지막으로, 우리는 상기 8가지 형식을 종합하여 다음 표를 보십시오.
    형식
    설명
    ${string: start :length}
    string 문자열의 왼쪽 첫 번째 start 문자부터 시작하여 오른쪽으로length 문자를 캡처합니다.
    ${string: start}
    string 문자열의 왼쪽 첫 번째 start 문자부터 마지막까지 캡처합니다.
    ${string: 0-start :length}
    string 문자열의 오른쪽 첫 번째 start 문자부터 시작해서 오른쪽으로length 문자를 캡처합니다.
    ${string: 0-start}
    string 문자열의 오른쪽 첫 번째 start 문자부터 마지막까지 캡처합니다.
    ${string#*chars}
    string 문자열이 처음 나타나는 *chars의 위치부터 *chars 오른쪽의 모든 문자를 캡처합니다.
    ${string##*chars}
    string 문자열이 마지막으로 *chars가 나타나는 위치부터 *chars 오른쪽의 모든 문자를 캡처합니다.
    ${string%*chars}
    string 문자열이 처음 나타나는 *chars의 위치부터 *chars 왼쪽의 모든 문자를 캡처합니다.
    ${string%%*chars}
    string 문자열이 마지막으로 *chars가 나타나는 위치부터 *chars 왼쪽의 모든 문자를 캡처합니다.
    셸 문자열 캡처의 실현 방법 (매우 상세한) 에 관한 이 글은 여기에 소개되었습니다. 더 많은 셸 문자열 캡처 내용은 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기