Поиск по сайту:

Sed Удалить пробелы


Удаление пробелов в документах — важный шаг форматирования, необходимый для улучшения общего макета текста и обеспечения чистоты и порядка данных. Это помогает хранить только необходимые данные и избавиться от ненужных начальных и конечных пробелов. Ниже приведены некоторые сценарии, в которых вам может потребоваться удалить пробелы:

  • Для переформатирования исходного кода

  • Для очистки данных

  • Для упрощения вывода командной строки

Если говорить о начальных пробелах, то их относительно легко заметить, так как они находятся в начале текста. Однако обнаружить конечные пробелы непросто. То же самое и с двойными пробелами, которые также иногда трудно обнаружить. Все становится более сложным, когда вам нужно удалить все эти начальные и конечные пробелы из документа, содержащего тысячи строк.

Чтобы удалить пробелы из вашего документа, вы можете использовать различные инструменты, такие как awk, sed, cut и tr. В некоторых других статьях мы обсуждали использование awk для удаления пробелов. В этой статье мы обсудим использование sed для удаления пробелов из данных.

Вы узнаете, как использовать sed для:

  • Удалить все пробелы

  • Удалить начальные пробелы

  • Удалить конечные пробелы

  • Удалите как начальные, так и конечные пробелы

  • Заменить несколько пробелов одним пробелом

Мы будем запускать команды на Ubuntu 20.04 Focal Fossa. Вы также можете запустить те же команды в других дистрибутивах Linux. Мы будем использовать приложение Ubuntu Terminal по умолчанию для запуска команд. Чтобы открыть Терминал, используйте сочетание клавиш Ctrl+Alt+T.

Что такое Сэд

Sed (расшифровывается как потоковый редактор) — очень мощная и удобная утилита в Linux, которая позволяет нам выполнять основные манипуляции с текстом во входных потоках. Это не текстовый редактор, но он помогает обрабатывать и фильтровать текст. Он получает входные потоки и редактирует их в соответствии с инструкциями пользователя, а затем выводит преобразованный текст на экран.

С помощью sed вы можете:

  • Выбрать текст

  • Поиск текста

  • Вставить текст

  • Заменить текст

  • Удалить текст

Использование Sed для удаления пробелов

Мы будем использовать следующий синтаксис для удаления пробелов из текста:

s/ REGEXP /replacement /flags

Где

  • s/: выражение подстановки

  • REGEXP: регулярное выражение для сопоставления

  • replacement: строка замены

  • флаги: мы будем использовать только флаг «g», чтобы включить замену глобально в каждой строке.

Обычные выражения

Вот некоторые из регулярных выражений, которые мы будем здесь использовать:

  • ^ соответствует началу строки

  • $ соответствует концу строки

  • + соответствует одному или нескольким вхождениям предшествующего символа

  • * соответствует нулю или более вхождениям предшествующего символа.

В демонстрационных целях мы будем использовать следующий образец файла с именем «testfile».

Просмотр всех пробелов в файле

Чтобы найти все пробелы в вашем файле, передайте вывод команды cat команде tr следующим образом:

$ cat testfile | tr " " "*" | tr "\t" "&"

Эта команда заменяет все пробелы в вашем файле символом (*), что упрощает обнаружение всех пробелов, независимо от того, являются ли они одиночными, множественными, ведущими или конечными пробелами.

На следующем снимке экрана вы можете видеть, что пробелы заменены символом *.

Удалить все пробелы (включая пробелы и табуляции)

В некоторых случаях вам нужно удалить все пробелы из данных, то есть начальные, конечные и пробелы между текстами. Следующая команда удалит все пробелы из «testfile».

$ 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]*$//'

Удалите как начальные, так и конечные пробелы

Чтобы удалить все пробелы как в начале, так и в конце каждой строки (т. е. как начальные, так и конечные пробелы), используйте следующую команду:

$ 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.

Следующая команда заменит все множественные пробелы одним пробелом в каждой строке «testfile».

$ cat testfile | sed 's/[ ]\+/ /g'

Вывод:

Следующий вывод появился после выполнения вышеуказанной команды, которая показывает, что несколько пробелов были заменены одним пробелом.

Вы также можете использовать следующую команду, чтобы проверить, заменены ли несколько пробелов одним пробелом:

$ cat testfile | sed 's/[ ]\+/ /g' | tr " " "*" | tr "\t" "&"

В выводе вы можете увидеть один символ (*) в каждом месте, который подтверждает, что все вхождения нескольких пробелов заменены одним пробелом.

Итак, речь шла об удалении пробелов из ваших данных с помощью sed. В этой статье вы узнали, как использовать sed для удаления всех пробелов из ваших данных, удаления только начальных или конечных пробелов, а также удаления начальных и конечных пробелов. Вы также узнали, как заменить несколько пробелов одним пробелом. Теперь вам будет легко удалить пробелы из файла, содержащего сотни или тысячи строк.

Статьи по данной тематике: