기본 문자열 연산

ShellShellBeginner
지금 연습하기

💡 이 튜토리얼은 영어로 번역되었습니다. 원본을 보려면 영어로 전환

소개

이 랩에서는 쉘 스크립팅의 기본적인 문자열 연산에 대해 배우게 됩니다. 문자열 연산은 다양한 스크립팅 작업에서 텍스트를 조작하고 데이터를 추출하는 데 필수적입니다. 문자열 길이 결정, 문자 위치 찾기, 부분 문자열 추출, 문자열의 일부 교체와 같은 개념을 탐구할 것입니다. 이러한 기술은 쉘 스크립트에서 효과적인 텍스트 처리에 매우 중요합니다.

빠른 참조 가이드

다음은 이 랩에서 다룰 문자열 연산에 대한 간략한 개요입니다.

연산 구문 설명 예시
문자열 길이 ${#string} 문자열의 문자 수를 계산합니다. ${#"hello"}5를 반환합니다.
문자 위치 찾기 $(expr index "$string" "$char") 문자열에서 문자의 위치를 찾습니다 (1 부터 시작). $(expr index "abcdef" "c")3을 반환합니다.
부분 문자열 추출 ${string:start:length} 문자열의 일부를 추출합니다 (0 부터 시작). ${"hello":1:3}ell을 반환합니다.
첫 번째 발생 교체 ${string/pattern/replacement} 패턴의 첫 번째 발생을 교체합니다. ${"hello"/l/L}heLlo를 반환합니다.
모든 발생 교체 ${string//pattern/replacement} 패턴의 모든 발생을 교체합니다. ${"hello"//l/L}heLLo를 반환합니다.
시작 부분에서 교체 ${string/#pattern/replacement} 문자열 시작 부분에 있는 경우에만 패턴을 교체합니다. ${"hello"/#he/HE}HEllo를 반환합니다.
끝 부분에서 교체 ${string/%pattern/replacement} 문자열 끝 부분에 있는 경우에만 패턴을 교체합니다. ${"hello"/%lo/LO}helLO를 반환합니다.
이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 96.11%입니다.

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL shell(("Shell")) -.-> shell/BasicSyntaxandStructureGroup(["Basic Syntax and Structure"]) shell(("Shell")) -.-> shell/VariableHandlingGroup(["Variable Handling"]) shell(("Shell")) -.-> shell/AdvancedScriptingConceptsGroup(["Advanced Scripting Concepts"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) shell/BasicSyntaxandStructureGroup -.-> shell/shebang("Shebang") shell/BasicSyntaxandStructureGroup -.-> shell/comments("Comments") shell/BasicSyntaxandStructureGroup -.-> shell/quoting("Quoting Mechanisms") shell/VariableHandlingGroup -.-> shell/variables_decl("Variable Declaration") shell/VariableHandlingGroup -.-> shell/variables_usage("Variable Usage") shell/VariableHandlingGroup -.-> shell/str_manipulation("String Manipulation") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") shell/VariableHandlingGroup -.-> shell/param_expansion("Parameter Expansion") shell/AdvancedScriptingConceptsGroup -.-> shell/cmd_substitution("Command Substitution") subgraph Lab Skills shell/shebang -.-> lab-388814{{"기본 문자열 연산"}} shell/comments -.-> lab-388814{{"기본 문자열 연산"}} shell/quoting -.-> lab-388814{{"기본 문자열 연산"}} shell/variables_decl -.-> lab-388814{{"기본 문자열 연산"}} shell/variables_usage -.-> lab-388814{{"기본 문자열 연산"}} shell/str_manipulation -.-> lab-388814{{"기본 문자열 연산"}} linux/touch -.-> lab-388814{{"기본 문자열 연산"}} shell/param_expansion -.-> lab-388814{{"기본 문자열 연산"}} shell/cmd_substitution -.-> lab-388814{{"기본 문자열 연산"}} end

스크립트 파일 생성하기

이제 문자열 연산을 작성할 스크립트 파일을 만들어 보겠습니다.

  1. WebIDE 에서 터미널을 엽니다. 터미널은 Linux 시스템과 상호 작용하기 위해 명령을 입력하는 곳입니다.

  2. 프로젝트 디렉토리로 이동합니다.

    cd ~/project

    이 명령은 현재 디렉토리를 ~/project로 변경합니다. ~ 기호는 홈 디렉토리를 나타내므로, ~/project는 홈 디렉토리 내의 "project"라는 폴더입니다.

  3. string_operations.sh라는 새 파일을 생성합니다.

    touch string_operations.sh

    touch 명령은 새 빈 파일을 생성합니다. 파일이 이미 존재하면 파일의 타임스탬프를 업데이트합니다.

  4. WebIDE 편집기에서 파일을 엽니다. WebIDE 왼쪽의 파일 탐색기에서 파일 이름을 클릭하여 이 작업을 수행할 수 있습니다.

  5. 인터프리터를 지정하기 위해 파일 상단에 다음 shebang 라인을 추가합니다.

    #!/bin/bash

    "shebang"이라고 불리는 이 라인은 시스템에 이 스크립트를 해석하기 위해 Bash 쉘을 사용하도록 지시합니다. 쉘 스크립트의 항상 첫 번째 줄입니다.

문자열 길이

이제 문자열의 길이를 결정하는 방법을 배워보겠습니다.

  1. 다음 코드를 string_operations.sh 파일에 추가합니다.

    echo "Step 2: String Length"
    
    STRING="Hello, World!"
    LENGTH=${#STRING}
    
    echo "The string is: $STRING"
    echo "Its length is: $LENGTH"

    단계별로 살펴보겠습니다.

    • 먼저, 이 섹션의 헤더를 표시하기 위해 echo 명령을 추가합니다.

      echo "Step 2: String Length"
    • 다음으로, STRING이라는 변수를 정의하고 "Hello, World!" 값을 할당합니다.

      STRING="Hello, World!"

      Bash 에서는 변수를 정의하기 위해 특별한 키워드를 사용할 필요가 없습니다. 변수 이름, 등호, 값을 차례로 작성하면 됩니다.

    • 그런 다음, ${#variable} 구문을 사용하여 문자열의 길이를 계산하고 LENGTH라는 변수에 저장합니다.

      LENGTH=${#STRING}

      ${#variable}은 변수에 저장된 문자열의 문자 수를 반환하는 특수한 쉘 매개변수 확장입니다.

    • 마지막으로, 원래 문자열과 그 길이를 모두 표시합니다.

      echo "The string is: $STRING"
      echo "Its length is: $LENGTH"

      변수 이름 앞에 있는 $ 기호는 Bash 에게 변수를 해당 값으로 대체하도록 지시합니다.

  2. 파일을 저장합니다. 대부분의 편집기에서는 Ctrl+S (Mac 에서는 Cmd+S) 를 눌러 저장할 수 있습니다.

  3. 스크립트를 실행 가능하게 만듭니다.

    chmod +x string_operations.sh

    이 명령은 파일을 실행 가능하도록 파일의 권한을 변경합니다.

    • chmod는 "change mode"의 약자입니다.
    • +x는 "실행 권한 추가"를 의미합니다.
    • 이 단계를 거치지 않으면 시스템은 이 파일을 프로그램으로 처리해야 한다는 것을 알지 못합니다.
  4. 스크립트를 실행합니다.

    ./string_operations.sh

    ./ 접두사는 쉘에게 현재 디렉토리에서 스크립트를 찾도록 지시합니다. 이 접두어가 없으면 쉘은 PATH 환경 변수에 나열된 디렉토리에서만 검색합니다.

다음과 유사한 출력을 볼 수 있습니다.

Step 2: String Length
The string is: Hello, World!
Its length is: 13

이 출력이 표시되지 않으면 파일을 저장하고 실행 가능하게 만들었는지 다시 확인하십시오.

문자 위치 찾기

다음으로, 문자열에서 문자의 위치를 찾는 방법을 배우겠습니다.

  1. 다음 코드를 string_operations.sh 파일에 추가합니다.

    echo -e "\nStep 3: Finding Character Position"
    
    STRING="abcdefghijklmnopqrstuvwxyz"
    CHAR="j"
    
    POSITION=$(expr index "$STRING" "$CHAR")
    
    echo "The string is: $STRING"
    echo "We're looking for the character: $CHAR"
    echo "It is at position: $POSITION"

    이 코드를 자세히 살펴보겠습니다.

    • -e 옵션과 \n 이스케이프 시퀀스를 포함하는 echo 명령으로 시작합니다.

      echo -e "\nStep 3: Finding Character Position"
      • -e 옵션은 이스케이프 시퀀스의 해석을 활성화합니다.
      • \n 이스케이프 시퀀스는 텍스트 앞에 줄 바꿈을 추가하여 이전 섹션과 시각적인 분리를 만듭니다.
    • 다음으로, 두 개의 변수를 정의합니다.

      STRING="abcdefghijklmnopqrstuvwxyz"
      CHAR="j"
      • STRING은 전체 소문자 알파벳을 포함합니다.
      • CHAR는 우리가 찾을 문자 "j"를 포함합니다.
    • expr index 명령을 사용하여 문자의 위치를 찾습니다.

      POSITION=$(expr index "$STRING" "$CHAR")
      • expr은 표현식을 평가하기 위한 유틸리티입니다.
      • index 연산은 문자열에서 문자를 검색합니다.
      • $() 구문은 명령의 출력을 캡처하여 POSITION 변수에 할당합니다.
      • 특수 문자와 관련된 문제를 방지하기 위해 변수를 큰따옴표로 묶습니다 ("$STRING").
      • 중요: 이 명령은 1 부터 시작하는 위치를 반환합니다 (0 이 아님).
    • 마지막으로, 결과를 출력합니다.

      echo "The string is: $STRING"
      echo "We're looking for the character: $CHAR"
      echo "It is at position: $POSITION"
  2. 파일을 저장하고 스크립트를 다시 실행합니다.

    ./string_operations.sh

다음과 유사한 추가 출력을 볼 수 있습니다.

Step 3: Finding Character Position
The string is: abcdefghijklmnopqrstuvwxyz
We're looking for the character: j
It is at position: 10

위치는 1 부터 시작하므로, 첫 번째 문자는 위치 1 에 있으며 0 이 아님에 유의하십시오. 이는 인덱싱이 일반적으로 0 부터 시작하는 많은 프로그래밍 언어와 다릅니다.

부분 문자열 추출

이제 문자열의 일부를 추출하는 방법을 배우겠습니다.

  1. 다음 코드를 string_operations.sh 파일에 추가합니다.

    echo -e "\nStep 4: Substring Extraction"
    
    STRING="The quick brown fox jumps over the lazy dog"
    START=10
    LENGTH=5
    
    SUBSTRING=${STRING:$START:$LENGTH}
    
    echo "The original string is: $STRING"
    echo "Extracting 5 characters starting from position 10:"
    echo "The substring is: $SUBSTRING"

    이 코드를 하나씩 분석해 보겠습니다.

    • 먼저, 시각적 분리를 위해 줄 바꿈과 함께 헤더를 추가합니다.

      echo -e "\nStep 4: Substring Extraction"
    • 다음으로, 변수를 정의합니다.

      STRING="The quick brown fox jumps over the lazy dog"
      START=10
      LENGTH=5
      • STRING은 샘플 문장을 포함합니다.
      • START는 추출을 시작하려는 위치입니다 (위치 10).
      • LENGTH는 추출하려는 문자 수입니다 (5 자).
    • Bash 의 부분 문자열 추출 구문을 사용하여 문자열의 일부를 가져옵니다.

      SUBSTRING=${STRING:$START:$LENGTH}
      • 구문은 ${variable:start_position:length}입니다.
      • $START$LENGTH는 값 10 과 5 를 포함하는 변수입니다.
      • 중요: expr index 명령과 달리, 여기의 위치는 0 부터 시작하는 인덱싱을 사용하므로 첫 번째 문자는 위치 0 에 있습니다.
    • 마지막으로, 결과를 표시합니다.

      echo "The original string is: $STRING"
      echo "Extracting 5 characters starting from position 10:"
      echo "The substring is: $SUBSTRING"
  2. 파일을 저장하고 스크립트를 다시 실행합니다.

    ./string_operations.sh

다음과 유사한 추가 출력을 볼 수 있습니다.

Step 4: Substring Extraction
The original string is: The quick brown fox jumps over the lazy dog
Extracting 5 characters starting from position 10:
The substring is: brown

"The quick brown fox..." 문자열에서 위치 10 (0 부터 계산할 때) 은 "brown"의 'b'이고, 다음 5 자는 "brown"입니다. 이것이 추출된 부분 문자열이 "brown"인 이유입니다.

인덱싱이 이전 단계에서 본 것과 다르다는 점을 명심하십시오.

  • expr index (Step 3) 에서 위치는 1 부터 시작합니다 (첫 번째 문자는 위치 1 에 있음).
  • 부분 문자열 추출 ${STRING:position:length} (Step 4) 에서 위치는 0 부터 시작합니다 (첫 번째 문자는 위치 0 에 있음).

이는 쉘 스크립팅에서 흔히 혼란을 야기하는 부분이므로, 어떤 연산이 어떤 인덱싱 시스템을 사용하는지 기억하는 것이 중요합니다.

문자열 대체

마지막으로, 문자열의 일부를 대체하는 방법을 배우겠습니다.

  1. 다음 코드를 string_operations.sh 파일에 추가합니다.

    echo -e "\nStep 5: String Replacement"
    
    STRING="The quick brown fox jumps over the lazy dog"
    echo "Original string: $STRING"
    
    ## Replace the first occurrence of 'o' with 'O'
    NEW_STRING=${STRING/o/O}
    echo "Replacing first 'o' with 'O': $NEW_STRING"
    
    ## Replace all occurrences of 'o' with 'O'
    NEW_STRING=${STRING//o/O}
    echo "Replacing all 'o' with 'O': $NEW_STRING"
    
    ## Replace 'The quick' with 'The slow' if it's at the beginning of the string
    NEW_STRING=${STRING/#The quick/The slow}
    echo "Replacing 'The quick' with 'The slow' at the beginning: $NEW_STRING"
    
    ## Replace 'dog' with 'cat' if it's at the end of the string
    NEW_STRING=${STRING/%dog/cat}
    echo "Replacing 'dog' with 'cat' at the end: $NEW_STRING"

    각 문자열 대체 연산을 살펴보겠습니다.

    • 먼저, 헤더를 출력하고 원래 문자열을 표시합니다.

      echo -e "\nStep 5: String Replacement"
      STRING="The quick brown fox jumps over the lazy dog"
      echo "Original string: $STRING"
    • 문자의 첫 번째 발생을 대체합니다.

      ## Replace the first occurrence of 'o' with 'O'
      NEW_STRING=${STRING/o/O}
      echo "Replacing first 'o' with 'O': $NEW_STRING"
      • 구문은 ${variable/pattern/replacement}입니다.
      • 이것은 'o'의 첫 번째 발생을 찾아 'O'로 대체합니다.
      • "brown"에서 첫 번째 'o'만 대체되고 나머지는 변경되지 않습니다.
    • 문자의 모든 발생을 대체합니다.

      ## Replace all occurrences of 'o' with 'O'
      NEW_STRING=${STRING//o/O}
      echo "Replacing all 'o' with 'O': $NEW_STRING"
      • 구문은 ${variable//pattern/replacement}입니다 (이중 슬래시에 유의).
      • 이중 슬래시는 Bash 에게 패턴의 모든 발생을 대체하도록 지시합니다.
      • 전체 문자열의 모든 'o'는 'O'로 대체됩니다.
    • 문자열의 시작 부분에서 패턴을 대체합니다.

      ## Replace 'The quick' with 'The slow' if it's at the beginning of the string
      NEW_STRING=${STRING/#The quick/The slow}
      echo "Replacing 'The quick' with 'The slow' at the beginning: $NEW_STRING"
      • 구문은 ${variable/#pattern/replacement}입니다.
      • # 기호는 패턴이 문자열의 시작 부분에 있어야 함을 지정합니다.
      • 이것은 문자열의 시작 부분에 'The quick'이 나타나는 경우에만 대체합니다.
    • 문자열의 끝 부분에서 패턴을 대체합니다.

      ## Replace 'dog' with 'cat' if it's at the end of the string
      NEW_STRING=${STRING/%dog/cat}
      echo "Replacing 'dog' with 'cat' at the end: $NEW_STRING"
      • 구문은 ${variable/%pattern/replacement}입니다.
      • % 기호는 패턴이 문자열의 끝 부분에 있어야 함을 지정합니다.
      • 이것은 문자열의 끝 부분에 'dog'가 나타나는 경우에만 대체합니다.
  2. 파일을 저장하고 스크립트를 다시 실행합니다.

    ./string_operations.sh

다음과 유사한 추가 출력을 볼 수 있습니다.

Step 5: String Replacement
Original string: The quick brown fox jumps over the lazy dog
Replacing first 'o' with 'O': The quick brOwn fox jumps over the lazy dog
Replacing all 'o' with 'O': The quick brOwn fOx jumps Over the lazy dOg
Replacing 'The quick' with 'The slow' at the beginning: The slow brown fox jumps over the lazy dog
Replacing 'dog' with 'cat' at the end: The quick brown fox jumps over the lazy cat

이러한 문자열 대체 연산은 쉘 스크립트에서 텍스트를 조작하기 위한 강력한 도구입니다. 패턴과 위치를 기반으로 대상 대체를 수행할 수 있으므로 데이터 처리, 텍스트 서식 지정 또는 파일 내용 조작과 같은 작업에 특히 유용합니다.

요약

이 랩에서는 쉘 스크립팅에서 몇 가지 기본적인 문자열 연산을 배우고 실습했습니다.

  1. 쉘 스크립트 생성 및 실행.
  2. ${#string}을 사용하여 문자열의 길이 계산.
  3. $(expr index "$string" "$char")를 사용하여 문자열 내 문자의 위치 찾기.
  4. ${string:start:length}를 사용하여 더 큰 문자열에서 부분 문자열 추출.
  5. 다양한 문자열 대체 연산 수행:
    • ${string/pattern/replacement} - 첫 번째 발생 대체
    • ${string//pattern/replacement} - 모든 발생 대체
    • ${string/#pattern/replacement} - 문자열 시작 부분에서 대체
    • ${string/%pattern/replacement} - 문자열 끝 부분에서 대체

이러한 기술은 쉘 스크립팅에서 더 복잡한 텍스트 처리 작업의 기초를 형성합니다. 쉘 스크립트를 계속 사용하면서 이러한 문자열 연산이 프로젝트에서 텍스트 데이터를 조작하고 분석하는 데 매우 유용하다는 것을 알게 될 것입니다. 기억하세요, 이러한 개념을 마스터하는 데는 연습이 중요하므로 다양한 문자열과 연산을 자유롭게 실험해 보세요!

OSZAR »