Как использовать Sed в Linux для основных задач оболочки
Sed — это простая программа UNIX. Он не создает и не редактирует файлы. Он только изменяет данные, которые проходят через его вход, и представляет измененные данные на выходе. Несмотря на это, sed считается одной из самых мощных утилит UNIX, с которыми вы столкнетесь в Linux, особенно когда она объединена с другими программами в вашей системе.
Цель этой статьи — научить основам использования этой крошечной программы. Кроме того, в нем также будет дан краткий обзор философии UNIXи того, насколько важна эта идея для понимания того, как работает ваш компьютер.
Читайте также: 5 лучших дистрибутивов Linux-Libre для повышения безопасности
Какова философия UNIX?
Философия UNIX заключается в том, что программа должна выполнять только одну задачу и делать ее хорошо. Он побуждает вас писать простые программы, которые можно повторно использовать для различных функций, вместо создания сложных программ, которые нельзя повторно использовать для других задач.
Хорошим примером является программа cat
. Это простая утилита, которая принимает входные данные и печатает их как поток текста.
Contents
Какова философия UNIX?
-03-cat-sample-2.png" alt="Основы сед 03 Образец кошки 2">
Философия UNIX позволяет использовать программу в сочетании с другими утилитами в системе . В свою очередь, этот подход в конечном итоге создает единый интерфейс для вашей системы, который вы можете изучить один раз и повторно использовать в разных контекстах.
Например, вы можете передать кошачий поток в такую программу, как grep
. Это простая программа, которая делает только одну вещь. Он ищет строку текста во входных данных и печатает строки, в которых этот текст появляется.
С другой стороны, вместо этого вы можете передать тот же поток cat в экранный пейджер , например less
. Это, в свою очередь, позволит вам прокручивать поток, как будто это один текстовый файл.
Читайте также: 6 лучших текстовых редакторов Linux
Как работает Sed?
С учетом сказанного, sed — это программа, которая читает поток текста и изменяет его. Однако sed изменяет только текстовый поток, а это означает, что он не изменяет файлы на вашем компьютере напрямую. Это может сбить с толку новичка, поскольку любые изменения, внесенные вами в sed, не появятся на диске.
Несмотря на это, sed по-прежнему остается мощной утилитой. Например, вы можете запустить следующую строку, чтобы прочитать вывод команды printf
:
printf "hello\nmaketecheasier\nworld\n" | sed n
Читайте также: Использование du для освобождения дискового пространства в Linux
Основы использования Sed
Зная это, использовать sed для основных задач невероятно легко. Рассмотрим следующий пример:
В этом случае я использовал команду n
, чтобы напечатать содержимое файла «привет».
1. Выбор и обрезка текстовых потоков
Кроме того, вы также можете указать sed изменить этот поток текста. Например, вы можете использовать команду 2q
, чтобы указать ей печатать только первые две строки файла «hello»:
Как работает Sed?х строк 1">
Это может быть невероятно полезно, если вы хотите получить только первые несколько строк текстового файла. Однако вы также можете использовать команду p
, чтобы указать sed печатать только диапазон строк в файле.
В приведенном выше примере я использовал sed для печати третьей и четвертой строк файла «hello». Вы также можете использовать ту же команду p
для печати несмежных строк в текстовом файле. Рассмотрим следующий пример:
При этом я говорю sed печатать только первую и четвертую строки файла «hello». Это может пригодиться, если вы хотите объединить несколько строк из разных потоков в один файл.
Например, вы можете использовать sed с >
оператор для записи измененного потока в файл.
sed -n 1~4p hello.txt > welcome.txt
Основы использования Sed5/sed-basics-13-write-non-adjacent-lines-to-file.png" alt="Основы Sed 13. Запись несмежных строк в файл">
Читайте также: Как использовать команду dd в Linux
2. Удаление текста
Еще одна замечательная функция sed — удаление текста в потоке. В отличие от печати, это позволяет вам выбрать строки текста, которые вы хотите исключить из потока.
Например, я использовал команду d
, чтобы удалить вторую и пя
1. Выбор и обрезка текстовых потоков
sed 2~5d hello.txt
Одним из преимуществ использования этой команды вместо команды p
является то, что она позволяет удалить только ту строку, которая вам не нужна. Это полезно, если вы хотите очистить большой файл или обрезать выходные данные, чтобы отображалась только необходимая информация.
3. Добавление нового текста
При этом вы также можете использовать sed для включения новых данных в текстовый поток. Например, вы можете использовать команду a
, чтобы добавить строку текста в текущий поток:
sed -n 2p hello.txt | sed a\ "this is a new line"
Кроме того, целые файлы также можно включить в текстовый поток. Для этого вы можете использовать команду r
, которая позволит вам прочитать один файл в текущий поток. Для этого вы можете запустить следующую команду, чтобы включить файл приветствия после второй строки приветствия.
sed -n 2p hello.txt | sed rwelcome.txt
Читайте также: Как использовать Emacs в качестве программы чтения USENET с Gnus
4. Замена текста и манипулирование потоком
Одно из блестящих применений sed — изменение существующих потоков. Это когда вы берете поток ввода текста и используете встроенные функции sed для изменения содержимого потока.
Возможно, это самая мощная функция sed. Поскольку это дает вам возможность динамически редактировать данные, когда они проходят через каналы. Например, вы можете легко редактировать выходные данные программы, как если бы это был текстовый файл:
printf "hello\nmaketecheasier\nworld\n" | sed s/world/website/
В этом примере я использовал команду s
, чтобы заменить слово «мир» на «веб-сайт». Однако, в отличие от предыдущих команд, для правильной работы эта команда использует особый синтаксис.
Зная это, общая форма команды s
выглядит примерно так:
s/[regex]/(string2. Удаление текстаn>{options}
- Первый столбец указывает, что это замещающая команда. В большинстве случаев для изменения текстового потока вам потребуется использовать только команду
s
.
- Во втором столбце указано слово, которое вы хотите заменить, используя структурные регулярные выражения . Это способ описания слов и грамматики с использованием общих правил. Например, вы можете описать слова «принты», «принц» и «букварь», написав
pri[n,m]..
.
- Третий столбец описывает слово, которым должна быть старая строка. В отличие от предыдущего столбца, в этом столбце не используются регулярные выражения. Вместо этого вы можете использовать обычный текст для описания нового слова.
- Последний столбец сообщает sed о необходимости применить любые дополнительные параметры, необходимые для замены. При этом наиболее распространенным флагом, который вы можете использовать, является
g
. Это означает, что команда заменит каждый экземпляр регулярного выражения новой строкой.
Читайте также: 3. Добавление нового текстаlya-nachinayushchih-po-regulyarnym-vyrazheniyam/" title="Руководство для начинающих по регулярным выражениям">Руководство для начинающих по регулярным выражениям
5. Использование замены текста в файлах
Вы можете применить команду s
для управления любым текстовым потоком по вашему желанию. Это полезно не только потому, что позволяет изменять данные на лету, но и потому, что вы можете использовать это практически с чем угодно в командной строке Linux.
Например, вы можете использовать команду s
с текстовым файлом, добавив имя файла в конце команды:
sed s/hello/welcome/ hello.txt
Здесь я говорю sed прочитать файл «hello» и заменить первый экземпляр слова «hello» на «добро пожаловать». Затем я могу сделать это для каждого экземпляра слова «привет» в файле, добавив параметр g
:
sed s/hello/welcome/g hello.txt
Читайте также: 7 лучших программ чтения USENET для Linux
Часто задаваемые вопросы
Можно ли внести изменения в файл с помощью sed?
Да! Помимо использования файловых операторов, можно использовать sed для прямой записи любого измененного текстового потока в файл. Для этого вы можете использовать sed с флагом -i
или использовать коман
4. Замена текста и манипулирование потоком
днако следует отметить одну важную вещь: эти команды не соответствуют стандарту POSIX. Это означает, что они не будут работать, если вы используете версию sed, отличную от GNU.
Я получаю «незавершенную» ошибку каждый раз, когда использую sed. Моя установка сломана?
Вовсе нет! Это проблема, которая возникает, когда вы неправильно пишете команду sed. Это часто встречается в командах замены, когда вы пытаетесь сопоставить или заменить строку пробелами.
Например, выполнение следующей команды приведет к «незавершенной» ошибке: sed s/hello/welcome back/g hello.txt
.
Вы можете это исправить, добавив перед пробелами escape-символ «\». Это особый персонаж , который указывает sed включать пробел при поиске или замене текста.
При этом правильная версия приведенной выше команды выглядит примерно так: sed s/hello/welcome\ back/g hello.txt
.
Помимо «g», есть ли другие флаги, которые я могу использовать с командой «s»?
Да! Помимо g
, вы также можете использовать флаг p
, чтобы указать sed отображать любые измененные строки.
Другой флаг, который вы можете использовать с s
, — это e
. Это позволит вам запускать команды оболочки каждый раз, когда sed заменяет слово. Например, вы можете запустить следующую команду, чтобы touch
запускалась каждый раз, когда он находит в файле слово «привет»: sed s/hello\ /touch\ /e hello.txt
.
Наконец, вы также можете использовать флаг i
, чтобы указать sed не учитывать регистр при поиске совпадений. Это полезно, если вы хотите сопоставить одно и то же слово, но с разными стилями регистра. Например, следующая команда заменит слово «привет» на «добро пожаловать» независимо от регистра: sed s/HELLO/welcome/i hello.txt
.
Если весь этот разговор вызвал у вас интерес к командной строке Linux. Вы можете прочитать нашу предыдущую статью, в которой мы рассказываем о некоторых из самых интересные подсказки Bash , которые вы можете использовать сегодня.
Автор изображения: Unsplash
5. Использование замены текста в файлах
Часто задаваемые вопросы
Можно ли внести изменения в файл с помощью sed?
Я получаю «незавершенную» ошибку каждый раз, когда использую sed. Моя установка сломана?
Помимо «g», есть ли другие флаги, которые я могу использовать с командой «s»?