Розкладання рядків засобами bash, про linux

Для роботи над рядками засобами 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 Зсув при негативних значеннях

При негативних значеннях відлік ведеться від кінця рядка, а останнього символу рядка відповідає значення рівне "-1".

Для запису негативного зсуву між двокрапкою та знаком мінус потрібно залишати пробіл або брати від'ємне значення в круглі дужки.

якщо не задана, то довжина підрядка автоматично продовжується до кінця.

Приклади з негативними значеннями .
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, регулярні вирази, шаблон, пошук, змінна, масив, рядок, символи, верхній, нижній, регістр