Основных операциях данной утилиты:
-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 указывает на изменение файлов "на месте".