ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Как командой Sed заменить новую строку пробелом

Как командой Sed заменить новую строку пробелом

В UNIX/Linux команда sed — это специальный инструмент для редактирования потоков. Он может выполнять различные операции с текстовым потоком, такие как поиск, нахождение и замена, а также вставка/удаление. Однако по большей части sed используется для поиска и замены текстового содержимого.

В этом руководстве мы покажем замену новой строки пробелом с помощью sed.

 

Использование sed для замены текста

Во-первых, давайте быстро рассмотрим выполнение базового поиска и замены с помощью sed. Тот же метод будет использоваться при замене новой строки пробелами с некоторыми дополнительными опциями. Структура команды следующая:

$ sed -e 's///'

 

Взгляните на следующую команду:

$ echo "the quick brown fox" | sed -e 's/quick/fast/g'

 

Команда echo выводит строку в STDOUT. Затем поток STDOUT передается в sed. Мы проинструктировали sed заменить любой экземпляр quick на fast. Наконец, вывод выводится на экран.

 

Замена новых строк пробелом

Для демонстрации я создал следующий текстовый файл test.txt с несколькими фиктивными данными:

$ cat test.txt

 

Команда sed принимает регулярные выражения для описания различных шаблонов. Используя эту функцию, мы собираемся описать новую строку как \n. Давайте попробуем заменить символы новой строки пробелами:

$ sed -e 's/\n/ /g' test.txt

 

Однако это не сработало, как ожидалось. Для достижения этой цели нам потребуются некоторые дополнительные опции. Взгляните на следующую команду:

$ sed -e ':a;N;$!ba;s/\n/ /g' test.txt

 

Команда sed состоит из нескольких разделов; каждый обозначает конкретную задачу:

 

Команда sed повторяет шаги, пока не дойдет до последней строки, заменяя все символы \n пробелами.

Вместо этой сложной команды мы можем упростить ситуацию, используя флаг -z, который указывает sed для работы с записями, разделенными нулями. Команда будет выглядеть так:

$ sed -z -e 's/\n/ /g' test.txt

 

Альтернативные методы

Хотя sed отлично справляется с этой задачей, есть несколько альтернативных инструментов. В этом разделе мы кратко рассмотрим пару из них.

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

$ tr '\n' ' ' < test.txt

 

Мы также можем использовать Perl для выполнения этой работы. Следующий синтаксис также похож на тот, что мы использовали с sed (но упрощенный):

$ perl -p -e 's/\n/ /' test.txt

 

Другой способ заменить символы новой строки пробелами — использовать команду вставки. Обратите внимание, что он может удалить только один символ:

$ paste -s -d ' ' test.txt

 

Подобно sed, Linux поставляется с другим инструментом awk. Подобно sed, он также может выполнять некоторые расширенные замены на входе. Для нашей цели используйте следующую команду awk:

$ awk 1 ORS=' ' test.txt

 

Вывод

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

Вместо использования сложных команд, которые трудно запомнить, мы используем сценарии Bash для выполнения многих задач в Linux. Хотя это происходит за счет некоторой производительности, гибкость и удобство использования того стоят.

Exit mobile version