Подолання маніпуляції рядками в Bash
Під час роботи зі сценаріями оболонки типовим завданням є розділення рядка на основі розділювача. Наприклад, розглянемо рядок, що містить адреси електронної пошти, розділені крапкою з комою. Якщо вам потрібно обробляти кожен електронний лист окремо, важливо зрозуміти, як розділити цей рядок. Ця стаття проведе вас через різні методи досягнення цього в Bash.
Ми розглянемо такі рішення, як використання команди `tr` і маніпулювання внутрішнім роздільником полів (IFS). Зрештою ви зможете ефективно впоратися з розділенням рядків і скинути IFS до значення за замовчуванням. Давайте розберемося та спростимо ваші завдання сценаріїв Bash!
Команда | опис |
---|---|
tr | Перекладає або видаляє символи. Використовується тут для заміни крапки з комою символом нового рядка, щоб розділити рядок. |
IFS | Внутрішній роздільник полів, який використовується для розділення рядків на основі певного розділювача в сценаріях Bash. |
read -r -a | Читає рядок введення та розбиває його на масив. Параметр -r запобігає тлумаченню зворотних похилих рис як символів екранування. |
echo | Друкує текст у стандартний вихід. Використовується для відображення елементів розділеного рядка. |
split | Функція Perl, яка ділить рядок на список рядків на основі заданого розділювача. |
foreach | Структура циклу Perl, яка повторює список значень. |
Розуміння методів розділення рядка Bash
Перший сценарій Bash демонструє, як розділити рядок за допомогою команда. Тут ми визначаємо рядок і використовувати в поєднанні з tr щоб перевести роздільник крапки з комою на символ нового рядка. Це фактично розбиває рядок на окремі рядки. The цикл потім повторює кожен рядок, друкуючи адреси в квадратних дужках. Цей метод є простим і використовує потужні можливості обробки тексту команд Unix для маніпулювання рядками.
Інший метод передбачає коригування . Тимчасово встановивши до крапки з комою, ми можемо розділити рядок на масив. Зберігаємо оригінал до OIFS перш ніж змінювати його, гарантуючи, що ми зможемо відновити його пізніше. The команда зчитує вхідний рядок у масив, що викликається , розділивши його на основі модифікованого . Після обробки оригінал IFS відновлюється. Цей підхід забезпечує більш програмний спосіб обробки розділення рядків у Bash, дозволяючи нам використовувати масиви для подальших маніпуляцій.
Використання Bash для розділення рядків на роздільник
Скрипт Bash
#!/usr/bin/env bash
# Input string
IN="bla@some.com;john@home.com"
# Split string using 'tr' and iterate
mails=$(echo $IN | tr ";" "\n")
for addr in $mails; do
echo "> [$addr]"
done
# Output:
# > [bla@some.com]
# > [john@home.com]
Розділення рядка в Bash за допомогою IFS
Скрипт Bash
#!/usr/bin/env bash
# Input string
IN="bla@some.com;john@home.com"
# Save the original IFS
OIFS=$IFS
# Set IFS to semicolon
IFS=';'
# Split string into an array
read -r -a mails2 <<< "$IN"
# Restore the original IFS
IFS=$OIFS
# Iterate over the array
for x in "${mails2[@]}"; do
echo "> [$x]"
done
# Output:
# > [bla@some.com]
# > [john@home.com]
Використання Python для розбиття рядків
Сценарій Python
#!/usr/bin/env python3
# Input string
IN = "bla@some.com;john@home.com"
# Split string by semicolon
mails = IN.split(';')
# Iterate and print each element
for addr in mails:
print(f"> [{addr}]")
# Output:
# > [bla@some.com]
# > [john@home.com]
Використання Perl для розділення рядка
Сценарій Perl
#!/usr/bin/env perl
use strict;
use warnings;
# Input string
my $IN = "bla@some.com;john@home.com";
# Split string by semicolon
my @mails = split(';', $IN);
# Iterate and print each element
foreach my $addr (@mails) {
print "> [$addr]\n";
}
# Output:
# > [bla@some.com]
# > [john@home.com]
Розширені методи поділу рядків у Bash
Інший потужний метод для розбиття рядків у Bash передбачає використання команда. це універсальна утиліта командного рядка, призначена для сканування та обробки шаблонів. Він може бути особливо корисним для розділення рядків, оскільки дозволяє нам визначати власні розділювачі полів. Наприклад, ми можемо використовувати щоб розділити рядок на основі розділювача крапки з комою та надрукувати окремі компоненти. Цей метод є дуже гнучким і може обробляти складніші завдання маніпулювання рядками, що робить його цінним інструментом у наборі інструментів програміста Bash.
Крім того, команду можна використовувати для розділення рядків на основі роздільників. The Команда зазвичай використовується для отримання розділів з кожного рядка вхідних даних. Вказавши роздільник за допомогою і вибравши поля за допомогою -f ми можемо ефективно розділяти та витягувати частини рядка. Наприклад, використовуючи витягне першу адресу електронної пошти з рядка введення. Ці розширені методи забезпечують більший контроль і точність для завдань маніпулювання рядками в Bash.
- Як розділити рядок на роздільник у Bash?
- Ви можете використовувати змінна або подібні команди , , і cut розділити рядки на роздільник.
- Що змінна в Bash?
- The (Внутрішній роздільник полів) — це спеціальна змінна, яка визначає символ(и), які використовуються для поділу введеного тексту на слова або маркери.
- Як я можу скинути змінної до значення за замовчуванням?
- Збережіть оригінал значення перед його зміною та відновлення після обробки: .
- Що означає виконати команду в розділенні рядків?
- The команда перекладає або видаляє символи. Він може замінити розділювачі на новий рядок, щоб розділити рядок: .
- Чи можу я розділити рядок на масив за допомогою Bash?
- Так, змінивши змінна і використовуючи , ви можете розділити рядок на масив:
- Що команда використовується для?
- це утиліта командного рядка для сканування та обробки шаблонів. Він може розділяти рядки, визначаючи спеціальні роздільники полів.
- Як працює командна робота?
- The команда виділяє розділи з кожного рядка введення. Він може розділяти рядки, вказуючи роздільник і вибираючи поля: .
- Чому використовує корисно в розділенні рядків?
- Використання дозволяє визначати спеціальні розділювачі для розділення рядків, що робить його універсальним для різних форматів введення.
- Чи можливо розділити рядок кількома роздільниками в Bash?
- Так, ви можете використовувати комбінацію і для обробки кількох роздільників.
- Чи можу я використовувати для поділу рядків у Bash?
- Поки це головним чином редактор потоку, його можна поєднувати з іншими командами, наприклад для непрямого розділення рядків.
Освоєння роботи з рядками в Bash може значно підвищити ефективність ваших сценаріїв. Чи використовуючи для простих роздільників або більш складних інструментів, як-от і , ці прийоми необхідні для ефективного програмування Bash. Не забувайте завжди відновлювати оригінал IFS щоб уникнути несподіваної поведінки ваших сценаріїв. За допомогою цих методів ви можете обробляти широкий спектр завдань обробки рядків у сценаріях Bash.