Основные операции с строками

ShellShellBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы узнаете о базовых операциях со строками в оболочке (shell scripting). Операции со строками являются важными для манипулирования и извлечения данных из текста в различных сценариях (скриптах). Вы изучите такие концепции, как определение длины строки, нахождение позиции символа, извлечение подстроки и замена частей строки. Эти навыки являются важными для эффективной обработки текста в скриптах оболочки.


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"

    Разберем этот код:

    • Мы определяем переменную STRING и присваиваем ей значение "Hello, World!".
    • ${#STRING} - это специальный синтаксис, который вычисляет длину строки, хранящейся в переменной STRING.
    • Мы сохраняем эту длину в переменной LENGTH.
    • Наконец, мы выводим на экран как строку, так и ее длину.
  2. Сохраните файл. В большинстве редакторов вы можете сделать это, нажав Ctrl+S (или Cmd+S на Mac).

  3. Сделайте скрипт исполняемым:

    chmod +x string_operations.sh

    Эта команда изменяет права доступа к файлу, чтобы сделать его исполняемым. chmod означает "change mode" (изменить режим), а +x означает "добавить разрешение на выполнение".

  4. Запустите скрипт:

    ./string_operations.sh

    ./ сообщает оболочке искать скрипт в текущей директории.

Вы должны увидеть вывод, похожий на следующий:

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"

    Вот, что делает этот код:

    • Мы определяем переменную STRING, содержащую алфавит.
    • Мы определяем переменную CHAR с символом, который мы ищем.
    • expr index "$STRING" "$CHAR" - это команда, которая находит позицию $CHAR в $STRING.
    • Мы сохраняем вывод этой команды в переменной 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.

Извлечение подстроки

Теперь давайте узнаем, как извлечь часть строки.

  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"

    Разберем этот код:

    • Мы определяем переменную STRING с примером предложения.
    • START - это позиция, с которой мы хотим начать извлечение (помните, здесь нумерация начинается с 0).
    • LENGTH - это количество символов, которые мы хотим извлечь.
    • ${STRING:$START:$LENGTH} - это синтаксис для извлечения подстроки. Это означает "из STRING взять LENGTH символов, начиная с позиции START".
    • Мы сохраняем эту подстроку в переменной 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

Обратите внимание, что в отличие от команды expr index, здесь нумерация позиций в строке начинается с 0, а не с 1. Именно поэтому мы получаем "brown", начиная с позиции 10.

Замена строки

Наконец, давайте узнаем, как заменять части строки.

  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 'quick' with 'slow' if it's at the beginning of the string
    NEW_STRING=${STRING/#quick/slow}
    echo "Replacing 'quick' with '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"

    Этот код демонстрирует различные техники замены строк:

    • ${STRING/o/O} заменяет первое вхождение 'o' на 'O'.
    • ${STRING//o/O} заменяет все вхождения 'o' на 'O'.
    • ${STRING/#quick/slow} заменяет 'quick' на 'slow', но только если 'quick' находится в начале строки.
    • ${STRING/%dog/cat} заменяет 'dog' на 'cat', но только если '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 'quick' with 'slow' at the beginning: The quick brown fox jumps over the lazy dog
Replacing 'dog' with 'cat' at the end: The quick brown fox jumps over the lazy cat

Обратите внимание, как каждая операция замены влияет на строку по - разному.

Резюме

В этом практическом занятии (лабораторной работе) вы изучили и отработали несколько фундаментальных операций с строками в оболочке (shell scripting):

  1. Создание и выполнение скрипта оболочки.
  2. Вычисление длины строки.
  3. Поиск позиции символа в строке.
  4. Извлечение подстроки из более длинной строки.
  5. Выполнение различных операций по замене строк.

Эти навыки являются основой для более сложных задач обработки текста в оболочке. По мере дальнейшей работы со скриптами оболочки вы обнаружите, что эти операции с строками будут неоценимы для манипулирования и анализа текстовых данных в ваших проектах. Помните, что практика - ключ к овладению этими концепциями, поэтому не стесняйтесь экспериментировать с разными строками и операциями!