Основных операциях данной утилиты:
-p
для вывода определенных строк используется операция (print);
-d
операция (delete) используется для удаления;
-y
(transform) используется для замены символов на соответствующие из паттерна. Ее действие похоже на команду tr
;
-n
или --quiet
- подавляет вывод по умолчанию, что позволяет выводить только необходимые строки;
-r
или --regexp-extended
- включает расширенные регулярные выражения;
-a
позволяет добавить строку после заданной;
-i
позволяет добавить строку перед заданной;
-c
позволяет заменить всю строку целиком;
-s
(substitute) нужна для замены определенных строк или символов;
-g
(global) используется для выполнения замены над всеми найденными соответствиями внутри строки. Без нее действия будут выполняться только для первого совпадения.
Команда sed (Stream Editor) в Linux является мощным инструментом для редактирования текстовых данных в потоке. Она позволяет выполнять различные операции по поиску, замене, удалению или изменению строк в файле или вводимых данных. sed часто используется в скриптах обработки текста, а также при работе с текстовыми файлами в командной строке.
Основной синтаксис команды sed выглядит следующим образом:
sed [опции] 'команда' файлы
Замена текста в строке:
$ echo "Hello, World!" | sed 's/Hello/Hi/'
Результат: "Hi, World!"
В данном примере команда sed ищет строку "Hello" и заменяет ее на "Hi". Обратите внимание, что команда s/Hello/Hi/
использует слэши в качестве разделителей. Вы можете выбрать любой другой символ в качестве разделителя, например, s|Hello|Hi|
.
Удаление строк:
$ cat file.txt
Hello, World!
Goodbye, World!
$ sed '2d' file.txt
Результат:
Hello, World!
В данном примере команда sed удаляет вторую строку из файла file.txt с помощью команды 2d
.
Фильтрация вывода:
$ cat file.txt
Line 1: Hello
Line 2: Hi
Line 3: Hello
$ sed -n '/Hello/p' file.txt
Результат:
Line 1: Hello
Line 3: Hello
Здесь команда sed фильтрует вывод и печатает только строки, содержащие слово "Hello". Опция -n
подавляет вывод по умолчанию, а команда /Hello/p
ищет строки с "Hello" и печатает их.
Замена в файле с сохранением:
$ cat file.txt
Hello, World!
$ sed -i 's/World/Universe/' file.txt
$ cat file.txt
Hello, Universe!
В данном примере команда sed заменяет слово "World" на "Universe" в файле file.txt с помощью опции -i
.
Замена всех вхождений в строке:
$ echo "Hello, Hello, Hello!" | sed 's/Hello/Hi/g'
Результат: "Hi, Hi, Hi!"
В данном примере команда sed заменяет все вхождения слова "Hello" на "Hi" в строке. Ключ -g
после команды s/Hello/Hi/
указывает на глобальную замену.
Использование регулярных выражений:
$ echo "Hello,123 World!" | sed 's/[0-9]//g'
Результат: "Hello, World!"
В этом примере команда sed использует регулярное выражение [0-9]
, чтобы удалить //
все цифры из строки. Ключ g
указывает на глобальную замену.
Изменение разделителя в выводе:
$ echo "/path/to/file.txt" | sed 's|/|\\|g'
Результат: "\path\to\file.txt"
Здесь команда sed заменяет все символы /
на \
в строке, используя разделитель |
вместо стандартного /
. Это полезно, когда вам нужно изменить разделитель на другой символ, чтобы избежать конфликтов.
Изменение только первого вхождения:
$ echo "Hello, Hello, Hello!" | sed 's/Hello/Hi/1'
Результат: "Hi, Hello, Hello!"
В данном примере команда sed
изменяет только первое вхождение слова "Hello" на "Hi" в строке. Ключ 1
после команды s/Hello/Hi/
указывает, что нужно заменить только первое вхождение.
Использование адресации для применения команд только к определенным строкам:
$ cat file.txt
Line 1: Hello
Line 2: Hi
Line 3: Hello
$ sed '2s/Hi/Hey/' file.txt
Результат:
Line 1: Hello
Line 2: Hey
Line 3: Hello
В данном примере команда sed
заменяет слово "Hi" на "Hey" только во второй строке. Адресация 2s/Hi/Hey/
указывает, что команда s/Hi/Hey/
должна быть применена только к второй строке.
Вставка новой строки перед или после существующей строки:
$ cat file.txt
Line 1: Hello
Line 2: World
$ sed '2i>New Line' file.txt
Результат:
Line 1: Hello
>New Line
Line 2: World
В этом примере команда sed
вставляет новую строку "New Line" перед второй строкой файла. Команда 2i>New Line
указывает, что новая строка должна быть вставлена перед второй строкой.
Удаление пустых строк:
$ cat file.txt
Line 1: Hello
Line 2: World
Line 3: Goodbye
$ sed '/^$/d' file.txt
Результат:
Line 1: Hello
Line 2: World
Line 3: Goodbye
В данном примере команда sed
удаляет все пустые строки из файла. Регулярное выражение /^$/
соответствует пустой строке, а команда d
указывает на удаление строки.
Замена текста в нескольких файлах:
$ cat file1.txt
Hello, World!
$ cat file2.txt
Hello, Universe!
$ sed -i 's/Hello/Hi/' file*.txt
$ cat file1.txt
Hi, World!
$ cat file2.txt
Hi, Universe!
В этом примере команда sed заменяет все вхождения слова "Hello" на "Hi" в файлах file1.txt и file2.txt. Опция -i
указывает на изменение файлов "на месте".