Thank you for reading this post, don't forget to subscribe!
Допустим, у вас есть длинная строка с несколькими словами, разделенными запятой или подчеркиванием. Вы хотите разбить эту строку и извлечь отдельные слова.
Вы можете разделить строки в bash, используя разделитель внутренних полей (IFS) и команду чтения, или вы можете использовать команду обрезки. Позвольте нам показать вам, как это сделать на примерах.
Метод 1: Разделить строку с помощью команды чтения в Bash
Вот наш пример сценария для разделения строки с помощью команды read:
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash # # Скрипт для разделения строки на основе разделителя my_string="Ubuntu;Linux Mint;Debian;Arch;Fedora" IFS=';' read -ra my_array <<< "$my_string" # Печать разделенной строки for i in "${my_array[@]}" do echo $i done |
Часть, которая разбивает строку, находится здесь:
1 |
IFS=';' read -ra my_array <<< "$my_string" |
IFS определяет разделитель, по которому вы хотите разбить строку. В нашем случае это точка с запятой. Это может быть что угодно: пробел, табуляция, запятая или даже алфавит.
IFS в команде read разделяет входные данные в разделителе. Команда read читает необработанный ввод (опция -r), поэтому интерпретирует обратную косую черту буквально, а не обрабатывает их как escape-символ. Опция -a с командой read сохраняет слово read в массиве.
Проще говоря, длинная строка разбивается на несколько слов, разделенных разделителем, и эти слова хранятся в массиве.
Теперь вы можете получить доступ к массиву, чтобы получить любое слово, которое вы хотите, или использовать цикл for в bash, чтобы напечатать все слова одно за другим, как мы делали в приведенном выше сценарии.
Вот вывод вышеприведенного скрипта:
Ubuntu
Linux Mint
Debian
Arch
Fedora
Способ 2: разделить строку с помощью команды trim в Bash
Это пример разделения строки bash с использованием команды trim (tr):
1 2 3 4 5 |
#! / bin / bash # # Скрипт для разделения строки на основе разделителя |
1 2 3 4 5 6 7 8 |
my_string="Ubuntu;Linux Mint;Debian;Arch;Fedora" my_array=($(echo $my_string | tr ";" "\n")) #Print the split string for i in "${my_array[@]}" do echo $i done |
Этот пример почти такой же, как и предыдущий. Вместо команды чтения, команда trim используется для разделения строки на разделителе.
Проблема с этим подходом состоит в том, что элемент массива разделен на «пробел». Из-за этого такие элементы, как «Linux Mint», будут рассматриваться как два слова.
Вот вывод вышеприведенного скрипта:
Ubuntu
Linux
Mint
Debian
Arch
Fedora