Unix / Linux - Regular Expressions with SED
Здравствуйте, будущие маги командной строки! Сегодня мы погружаемся в магический мир регулярных выражений (regex) и мощной команды SED в Unix/Linux. Затяните ремни, потому что мы на пороге захватывающего приключения, которое изменит ваш подход к манипулированию текстом!
Вызов 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