В UNIX/Linux команда 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. Хотя это происходит за счет некоторой производительности, гибкость и удобство использования того стоят.