- Для переформатування вихідного коду
- Для очищення даних
- Для спрощення виводу з командного рядка
Якщо говорити про провідні пробіли, їх порівняно легко помітити, як і на початку тексту. Однак виявити проміжки, що виходять, непросто. Те саме стосується подвійних пробілів, які також часом важко помітити. Усе це стає більш складним завданням, коли вам потрібно видалити всі проміжні проміжні та кінцеві пробіли з документа, що містить тисячі рядків.
Щоб видалити пробіли з документа, ви можете використовувати різні інструменти, такі як awk, sed, cut і tr. У деяких інших статтях ми обговорювали використання awk для видалення пробілів. У цій статті ми обговоримо використання sed для видалення пробілів із даних.
Ви дізнаєтесь, як використовувати sed:
- Видаліть усі пробіли
- Видаліть пробіли, що ведуть
- Видаліть кінцеві пробіли
- Видаліть пробіли як на початку, так і на кінці
- Замініть кілька пробілів на один пробіл
Ми будемо запускати команди на Ubuntu 20.04 Фокальна ямка. Ви також можете запускати ті самі команди в інших дистрибутивах Linux. Для запуску команд ми будемо використовувати програму Ubuntu Terminal за замовчуванням. Щоб відкрити термінал, використовуйте комбінацію клавіш Ctrl + Alt + T.
Що таке Sed
Sed (розшифровується як редактор потоків) - це дуже потужна та зручна утиліта в Linux, яка дозволяє нам виконувати основні маніпуляції з текстом на вхідних потоках. Це не текстовий редактор, але він допомагає маніпулювати та фільтрувати текст. Він отримує вхідні потоки та редагує їх відповідно до інструкцій користувача, а потім друкує перетворений текст на екран.
За допомогою sed ви можете:
- Виділіть текст
- Пошук тексту
- Вставити текст
- Замінити текст
- Видалити текст
Використання Sed для видалення пробілів
Для видалення пробілів із тексту ми використовуватимемо такий синтаксис:
s / REGEXP / replacement / flagsДе
- s /: є вираз заміщення
- REGEXP: є регулярним виразом, що відповідає
- заміна: є рядком заміни
- прапори: Ми будемо використовувати лише прапор «g», щоб увімкнути заміну глобально на кожному рядку
Регулярні вирази
Деякі регулярні вирази, які ми будемо використовувати тут:
- ^ відповідає початку рядка
- $ сірники кінець рядка
- + відповідає одному або кільком випадкам попереднього символу
- * відповідає нулю або більше випадків попереднього символу.
З метою демонстрації ми будемо використовувати наступний зразок файлу з назвою „testfile”.
Переглянути всі пробіли у файлі
Щоб знайти всі пробіли у вашому файлі, передайте вихідні дані команди cat до команди tr таким чином:
$ cat testfile | tr "" "*" | tr "\ t" "&"Ця команда замінює всі пробіли у вашому файлі символом (*), що полегшує визначення всіх пробілів, незалежно від того, чи є вони одинарними, множинними, провідними або кінцевими пробілами.
На наступному скріншоті ви можете побачити пробіли, замінені символом *.
Видалити всі пробіли (включаючи пробіли та вкладки)
У деяких випадках потрібно видалити всі пробіли з даних, тобто.e. провідні, кінцеві та пробіли між текстами. Наступна команда видалить усі пробіли з “тестового файлу”.
$ cat testfile | sed -r 's / \ s + // g'Примітка: Sed не змінює ваші файли, якщо ви не збережете вихідні дані у файл.
Вихід:
Після запуску наведеної вище команди з’явився такий вивід, який показує, що всі пробіли були видалені з тексту.
Ви також можете використовувати наступну команду, щоб перевірити, чи всі пробіли були видалені.
$ cat testfile | sed -r 's / \ s + // g' | tr "" "*" | tr "\ t" "&"З виводу видно, що немає символу (*), що означає, що всі пробіли були видалені.
Щоб видалити всі пробіли, але лише з певного рядка (скажімо, рядок номер 2), ви можете використовувати таку команду:
$ cat testfile | sed -r '2s / \ s + // g'Видалити всі провідні пробіли (включаючи пробіли та вкладки)
Щоб видалити всі пробіли з початку кожного рядка (провідні пробіли), використовуйте таку команду:
$ cat testfile | sed 's / ^ [\ t] * //'Вихід:
Наступний вивід з’явився після запуску наведеної вище команди, яка показує, що всі провідні пробіли були видалені з тексту.
Ви також можете використати таку команду, щоб перевірити, що всі провідні пробіли були видалені:
$ cat testfile | sed 's / ^ [\ t] * //' | tr "" "*" | tr "\ t" "&"З вихідних даних видно, що на початку рядків немає символу (*), який підтверджує, що всі пробіли, що ведуть, видалено.
Щоб видалити пробіли, що ведуть, лише з певного рядка (скажімо, рядок номер 2), ви можете використовувати таку команду:
$ cat testfile | sed '2s / ^ [\ t] * //'Видалити всі кінцеві пробіли (включаючи пробіли та вкладки)
Щоб видалити всі пробіли з кінця кожного рядка (кінцеві пробіли), використовуйте таку команду:
$ cat testfile | sed 's / [\ t] * $ //'Вихід:
Наступний результат з’явився після запуску наведеної вище команди, яка показує, що всі кінцеві пробіли були видалені з тексту.
Ви також можете скористатися наведеною нижче командою, щоб перевірити, чи всі проміжні проміжки були видалені.
$ cat testfile | sed 's / [\ t] * $ //' | tr "" "*" | tr "\ t" "&"З вихідних даних видно, що в кінці рядків немає символу (*), який підтверджує, що всі кінцеві пробіли видалено.
Щоб видалити кінцеві пробіли лише з певного рядка (скажімо, рядок номер 2), можна скористатися наступною командою:
$ cat testfile | sed '2s / [\ t] * $ //'Видаліть проміжні проміжні та кінцеві пробіли
Щоб видалити всі пробіли як з початку, так і з кінця кожного рядка (i.e. як провідні, так і кінцеві пробіли), використовуйте таку команду:
$ cat testfile | sed 's / ^ [\ t] * //; s / [\ t] * $ //'Вихід:
Наступний висновок з’явився після запуску наведеної вище команди, яка показує, що проміжні проміжні та кінцеві проміжки були видалені з тексту.
Ви також можете скористатися наступною командою, щоб перевірити, що пробіли як на початку, так і на кінці були видалені.
$ cat testfile | sed 's / ^ [\ t] * //; s / [\ t] * $ //' | tr "" "*" | tr "\ t" "&"З вихідних даних видно, що на початку або в кінці рядків немає символу (*), який підтверджує, що всі провідні та кінцеві пробіли видалено.
Щоб видалити пробіли як на початку, так і на кінці лише з певного рядка (скажімо, рядок номер 2), можна скористатися наступною командою:
$ cat testfile | sed '2s / ^ [\ t] * //; 2s / [\ t] * $ //'Замініть кілька пробілів на одинарні пробіли
У деяких випадках у файлі є кілька пробілів в одному місці, але вам потрібні лише одні пробіли. Ви можете зробити це, замінивши ці кілька пробілів на один пробіл, використовуючи sed.
Наступна команда замінить усі множинні пробіли одинарними пробілами з кожного рядка у “тестовому файлі”.
$ cat testfile | sed 's / [] \ + / / g'Вихід:
Наступний результат з’явився після запуску наведеної вище команди, яка показує, що множинні пробіли замінені єдиними пробілами.
Ви також можете скористатися наступною командою, щоб перевірити, чи замінено кілька пробілів на один пробіл:
$ cat testfile | sed 's / [] \ + / / g' | tr "" "*" | tr "\ t" "&"З вихідних даних ви можете побачити одинарний символ (*) у кожному місці, який підтверджує, що всі випадки декількох пробілів замінені одним пробілом.
Отже, все це стосувалося видалення пробілів з ваших даних за допомогою sed. У цій статті ви дізналися, як за допомогою sed видалити всі пробіли з даних, видалити лише провідні або кінцеві пробіли, а також провідні та кінцеві пробіли. Ви також дізналися, як замінити кілька пробілів одним пробілом. Тепер вам буде легко видалити пробіли з файлу, що містить сотні або тисячі рядків.