Для роботи над рядками засобами Bash використовуються параметри розкладання (parameter expansions) Опис цього принципу можна знайти в man Bash в пункті 3.5.3 Shell Parameter Expansion.
Опис важкувато для розуміння. Набагато простіше зрозуміти принцип роботи на прикладах.
1. Видалення символів на початку або в кінці рядка
Будь-який одиночний символ позначається як "?"
Задамо змінну STRING:
Для видалення символів на початку рядка використовуємо команди: для видалення символів в кінці рядка: Що б запам'ятати, коли застосовувати знак #. а коли% використовують ось такий оригінальний спосіб:
Символи # $% розташовуються на клавіатурі послідовно і:
# - зліва від $. означає з початку рядка
% - праворуч від $. означає до кінця рядка
2. Видалення регулярних виразів на початку або в кінці рядка
Регулярні вирази (regular expressions або RegExp, regex) - це рядок-шаблоном або «маска» задає правило пошуку.
Знову поставимо змінну STRING:
видаляємо регулярний вираз на початку рядка: видаляємо регулярний вираз в кінці рядка: Тепер те ж саме, але використовуючи "*" (Астеріск)
видаляємо регулярний вираз на початку рядка (GNU = * U): видаляємо регулярний вираз в кінці рядка (Linux = L *):
Використання регулярних виразів може бути скомбіновані з "?" (Знаком будь-якого символу) (Linux = L * = ?? n *):
3. Використання здвоєних # 035; # 035; і # 037; # 037;
Якщо при видаленні з рядка регулярних виразів (* regex або regex *), при використанні "#" і "%" з "*" - видалення йде до першого входження регулярного вираження. то при використанні здвоєних "# 035; # 035;" і "# 037; # 037;" - до останнього:
І знову поставимо змінну STRING:
4. Пошук і заміна
5. Витяг подстроки використовуючи зміщення і довжину $
offset -смещеніе від краю рядка
length-довжина підрядка
5.1 Зсув при позитивних значеннях
При позитивних значеннях зсуву першого символу рядка відповідає значення "0".
якщо
Приклади з позитивними значеннями
5.2 Зсув при негативних значеннях
При негативних значеннях
Для запису негативного зсуву між двокрапкою та знаком мінус потрібно залишати пробіл або брати від'ємне значення в круглі дужки.
якщо
Приклади з негативними значеннями
5.3 Негативні значення
якщо
Як все це застосувати на практиці:
Нижче представлені різні варіанти коду для зміни розширення з * .wav на * .mp3 при пакетному перекодуванні аудіофайлів:
6. Підрахунок кількості символів в рядку $
Дізнатися кількість символів в файлі:
Тут потрібно відзначити, що файл читається не просто в змінну, а в масив, так як він складається з декількох рядків. Тому для правильного підрахунку необхідно ставити [@]. Якщо цього не зробити, то команда прочитає тільки перший рядок з файлу:
І правда, перший рядок містить лише тег і символ перекладу рядка виндовс (CR + LF) - і того 7 символів.
7. Зміна регістру символів
$ -Переклад перший символ у верхній регістр
$ -Переклад все символи в верхній регістр
$ -Переклад перший символ в нижній регістр
$ -Переклад все символи в нижній регістр
> -інвертірует регістр першого символу
> -інвертірует регістр всіх символів
Теги: Linux, bash, shell, regular expressions, parameter expansions, RegExp, regex, length, offset, for, in, do. lame, done, * .wav, mp3, CR + LF, регулярні вирази, шаблон, пошук, змінна, масив, рядок, символи, верхній, нижній, регістр