Unix / Linux - Regular Expressions with SED

Здравствуйте, будущие маги командной строки! Сегодня мы погружаемся в магический мир регулярных выражений (regex) и мощной команды SED в Unix/Linux. Затяните ремни, потому что мы на пороге захватывающего приключения, которое изменит ваш подход к манипулированию текстом!

Unix / Linux - Regular Expressions

Вызов sed

Давайте начнем с азов. SED, что означает "Stream Editor", - это мощный инструмент обработки текста. Чтобы использовать его, мы просто набираем "sed" и следом наши команды. Это как призвать текст manipulate-ющего джинна!

sed 'command' filename

например:

sed 's/hello/bonjour/' greetings.txt

Эта команда заменяет "hello" на "bonjour" в файле greetings.txt. Просто, правда?

Общий синтаксис sed

Общий синтаксис для sed похож на магическую формулу:

sed OPTIONS... [SCRIPT] [INPUTFILE...]

Не волнуйтесь, если это выглядит пугающе. Мы разберем это по частям, как solved головоломку!

Удаление всех строк с помощью sed

Хотите сделать текст во всем файле исчезнуть? Sed может это сделать! Вот как:

sed 'd' filename

Эта команда удаляет все строки в файле. Это как стереть все в вашем цифровом блокноте!

Адреса sed

Адреса в sed resemble GPS-координаты для вашего текста. Они говорят sed, где perform его магию. Вот несколько примеров:

sed '2d' file.txt  # Удаляет 2-ю строку
sed '/pattern/d' file.txt  # Удаляет строки, содержащие 'pattern'

Диапазоны адресов sed

Иногда мы хотим применить наше заклинание к range строк. Вот как:

sed '2,5d' file.txt  # Удаляет строки с 2-й по 5-ю
sed '2,$d' file.txt  # Удаляет со 2-й строки до конца файла

Команда замены

Команда замены - это хлеб с маслом sed. Это как "найти и заменить" на стероидах!

sed 's/old/new/' file.txt

Эта команда заменяет первое occurrence "old" на "new" на каждой строке.

Флаги замены

Флаги - это как power-ups для ваших команд замены. Вот таблицаcommon флагов:

Флаг Описание
g Заменить все occurrences, а не только первое
i Игнорировать регистр
p Вывести измененную строку
w Записать результат в файл

Пример:

sed 's/cat/dog/g' pets.txt

Эта команда заменяет все occurrences "cat" на "dog".

Использование альтернативного разделителя строк

Иногда ваш текст содержит много слешей. Не волнуйтесь! Мы можем использовать разные разделители:

sed 's#/usr/local/bin#/common/bin#' paths.txt

Здесь мы используем '#' в качестве разделителя вместо '/'.

Замена на пустое пространство

Хотите сделать текст исчезнуть бесследно? Вот как:

sed 's/unwanted//g' file.txt

Эта команда удаляет все occurrences "unwanted" из файла.

Замена с адресом

Мы можем combine адреса с заменой для точной хирургии текста:

sed '3,6s/foo/bar/g' file.txt

Эта команда заменяет все "foo" на "bar", но только на строках с 3-й по 6-ю.

Команда соответствия

Команда соответствия похожа на spotlight, illuminating строки, которые нас интересуют:

sed -n '/pattern/p' file.txt

Эта команда выводит только строки, содержащие "pattern".

Использование регулярных выражений

Теперь мы подходим к реальной магии! Регулярные выражения - это как wilcards на стероидах. Вот простой пример:

sed -n '/^The/p' story.txt

Эта команда выводит все строки, начинающиеся с "The".

Соответствие символам

Регулярные выражения имеют special символы, которые act как shapeshifters:

Символ Значение
. Любой один символ
* Ноль или больше previous символов
^ Начало строки
$ Конец строки

Пример:

sed -n '/c.t/p' animals.txt

Это соответствует "cat", "cot", "cut" и т.д.

Классы символов

Классы символов resemble команды characters. Вот несколько MVP игроков:

Класс Matches
[:alpha:] Alphabetic символы
[:digit:] Numeric символы
[:alnum:] Alphanumeric символы

Пример:

sed -n '/[[:digit:]]/p' data.txt

Эта команда выводит строки, содержащие أي digit.

Ссылка на ampersand

Амперсанд (&) похож на magic зеркало, reflecting то, что было matched:

sed 's/[0-9]/(&)/' numbers.txt

Эта команда puts скобки вокруг каждого числа.

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

Хотите применить несколько заклинаний сразу? Используйте опцию -e:

sed -e 's/foo/bar/g' -e 's/baz/qux/g' file.txt

Эта команда perform две замены за один раз!

Обратные ссылки

Обратные ссылки resemble time machines, позволяющие нам reuse части match:

sed 's/\(.*\):\(.*\)/\2:\1/' names.txt

Эта команда swaps текст перед и после двоеточия.

И вот оно, мои дорогие студенты! Мы прошли через страну sed и регулярных выражений. Помните, что практика makes perfect. Так что идите вперед и manipulate текст, как command-line sorcerers, whom вы становитесь! Счастливого кодирования!

Credits: Image by storyset