- Sed linux ������� ���������� ���������
- СИНТАКСИС КОМАНД
- Безадресные команды
- Команды без адреса или с одним адресом
- Команды, которые принимают интервалы адресов
- АДРЕСАЦИЯ
- Sed Command in Linux/Unix with examples
- sed в linux — примеры использования
- Примеры
- Фильтрация строк
- Замена по шаблону
- Удаление строк
- Извлечение подстрок
- Потоковый редактор SED
- Формат команды sed
- Формат команд редактирования
- Основные команды
- Метки
- Цикл выполнения
- Более сложные примеры
- Дополнительная информация
Sed linux ������� ���������� ���������
Если в командной строке не указан параметр -e , -f , —expressiln или —file , то первый же заданный в командной строке аргумент не-опция будет считаться сценарием для выполнения.
Если какие-либо параметры командной строки остаются после вышеупомянутой обработки, то они интерпретируются как имена входных файлов подлежащих обработке. Имя файла — соотносится со стандартным входным потоком. Стандартный ввод обрабатывается в том случае, если никаких имён файлов не определено.
СИНТАКСИС КОМАНД
Безадресные команды
Команды без адреса или с одним адресом
Команды, которые принимают интервалы адресов
АДРЕСАЦИЯ
После адресов (или диапазона адресов) и перед командой может быть вставлен ! , означающий, что команда должна быть выполнена только в том случае, если адрес (или диапазон адресов) не соответствует.
Поддерживаются следующие типы адресов: номер Соответствует только заданному номеру линии. первая
шаг Соответствует каждой строке шаг начиная от строки первая . Например, «sed -n 1
2p» напечатает все нечётные строки во входном потоке и адреса 2
5 будут соответствовать каждой пятой строке начиная со второй. (Это расширение GNU.) $ Соответствует последней строке. / regexp / Соответствует строкам подпадающим под определение регулярного выражения regexp . \ c regexp c Соотвествует строкам подпадающим под определение регулярного выражения regexp . c может быть любым символом.
Источник
Sed Command in Linux/Unix with examples
SED command in UNIX is stands for stream editor and it can perform lot’s of function on file like, searching, find and replace, insertion or deletion. Though most common use of SED command in UNIX is for substitution or for find and replace. By using SED you can edit files even without opening it, which is much quicker way to find and replace something in file, than first opening that file in VI Editor and then changing it.
- SED is a powerful text stream editor. Can do insertion, deletion, search and replace(substitution).
- SED command in unix supports regular expression which allows it perform complex pattern matching.
Syntax:
Example:
Consider the below text file as an input.
Sample Commands
- Replacing or substituting string : Sed command is mostly used to replace the text in a file. The below simple sed command replaces the word “unix” with “linux” in the file.
Output :
Here the “s” specifies the substitution operation. The “/” are delimiters. The “unix” is the search pattern and the “linux” is the replacement string.
By default, the sed command replaces the first occurrence of the pattern in each line and it won’t replace the second, third…occurrence in the line.
Replacing the nth occurrence of a pattern in a line : Use the /1, /2 etc flags to replace the first, second occurrence of a pattern in a line. The below command replaces the second occurrence of the word “unix” with “linux” in a line.
Output:
Replacing all the occurrence of the pattern in a line : The substitute flag /g (global replacement) specifies the sed command to replace all the occurrences of the string in the line.
Output :
Replacing from nth occurrence to all occurrences in a line : Use the combination of /1, /2 etc and /g to replace all the patterns from the nth occurrence of a pattern in a line. The following sed command replaces the third, fourth, fifth… “unix” word with “linux” word in a line.
Output:
Parenthesize first character of each word : This sed example prints the first character of every word in parenthesis.
Output:
Replacing string on a specific line number : You can restrict the sed command to replace the string on a specific line number. An example is
Output:
The above sed command replaces the string only on the third line.
Duplicating the replaced line with /p flag : The /p print flag prints the replaced line twice on the terminal. If a line does not have the search pattern and is not replaced, then the /p prints that line only once.
Output:
Printing only the replaced lines : Use the -n option along with the /p print flag to display only the replaced lines. Here the -n option suppresses the duplicate rows generated by the /p flag and prints the replaced lines only one time.
Output:
If you use -n alone without /p, then the sed does not print anything.
Replacing string on a range of lines : You can specify a range of line numbers to the sed command for replacing a string.
Output:
Here the sed command replaces the lines with range from 1 to 3. Another example is
Output:
Here $ indicates the last line in the file. So the sed command replaces the text from second line to last line in the file.
Deleting lines from a particular file : SED command can also be used for deleting lines from a particular file. SED command is used for performing deletion operation without even opening the file
Examples:
1. To Delete a particular line say n in this example
2. To Delete a last line
3. To Delete line from range x to y
4. To Delete from nth to last line
5. To Delete pattern matching line
This article is contributed by Akshay Rajput and Mohak Agrawal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Источник
sed в linux — примеры использования
Утилита sed это мощный потоковый редактор текста с поддержкой регулярных выражений. С помощью sed вы можете заменять шаблоны текста (причем непосредственно в файле!), удалять строки (элементы массива), выводить подходящие по маске строки (подобно grep). Редактор sed поддерживает применение нескольких команд и расширенный синтаксис регулярных выражений (при котором не нужно экранировать спец. символы).
Важно!
В sed нет поддержки опережающих и ретроспективных проверок в регулярках! Для замены с использованием расширенного синтаксиса regex используйте:
Внимание!
В sed довольно проблемно работать с символом перевода строки! Самое удобное решение — это:
В качестве разделителей можно использовать любые символы (напрмиер: # , @ ). Match части (которые внутри круглых скобок) доступны как \1 , \2 , \n .
Флаги строки-команды (указывать в конце маски):
Примеры
Фильтрация строк
Вывести строки 1-5:
Вывести файлы соответствующие маске:
Строки длиннее 80 символов:
Замена по шаблону
Вывести вхождения (matches) через табуляцию:
Заменить названия файлов (composer на composer-dev):
Заменить символы (regex):
Заменить URL в файле (штука в разделителях | , и -i для замены в файле):
Заменить параметр в конфиге:
Заменить значение в xml-конфиге:
Удалить начальные пробелы (аналог ltrim):
Удаление строк
Удалить из файла строку подходящую шаблону:
Удалить первую строку вывода:
Удалить строки от первой до соответствующей regex:
Примечание
По умолчанию необходимо экранировать все спец. символы в regex’ах, что крайне затрудняет чтение масок. Для того, чтобы экранировать спец.символы только в случае описания в тексте их самих — включите расширенный режим regex выражений с помощью опции -r .
Удалить пустые строки:
Удалить последние N=2 символа:
Извлечение подстрок
Вырезать / запомнить последние N=4 символа:
Источник
Потоковый редактор SED
Sed — лёгкий (бинарник весит всего 128 килобайт) и удобный инструмент обработки текста.
В этой статье я приведу несколько простых примеров использования sed и расскажу о его основных возможностях.
Sed получает входной поток данных или файл построчно, редактирует каждую строку согласно правилам, определённым в sed-скрипте, и затем выводит результат. Sed это тьюринг-полный язык программирования.
Формат команды sed
Команда sed имеет формат:
sed [ -n ] [ -e скрипт ] [ -f скрипт-файл ] [ файлы ]
Флаг -n подавляет вывод
-e — указывает на список инструкций, заданный в командной строке.
-f — указывает местонахождение файла-скрипта.
Формат команд редактирования
Скриптовый файл состоит из набора команд:
[ адрес [ , адрес ] ] команда [ аргументы ]
по одной в каждой строке.
Адреса это либо номера строк, либо специальные символы, либо регулярное выражение:
$ — последняя строка
начало
N — Каждая N-я строка, начиная с номера начало
/регулярное_выражение/ — строки, попадающие под регулярное_выражение
Примеры:
2 — Каждая вторая строка /REGEXP/ — все строки, в которых встречается /REGEXP/ 10,20 — строки с 10-й по 20-ю 10,+10 — строки с 10-й по 20-ю 5,
N — строки начиная с 5-й и до первой, кратной N5,/REGEXP/ — строки, содержащие /REGEXP/, после 5-й(не включая 5-ю)
- Если адрес не указан, обрабатываются все строки.
- Если указан один адрес — обрабатывается соответствующая строка
- Если указаны два адреса, то выбираются строки в заданном интервале.
- !команда — выполняется команда, для строк, которые небыли выбраны по адресам.
Основные команды
Рассмотрим основные команды:
[адрес] a текст — добавить новую строку с текстом после указанной строки
$ cat sed_test sed_test_1 11111 sed_test_2 22222 sed_test_3 33333 $ sed -e ‘2 a new_line’ sed_test sed_test_1 11111 sed_test_2 22222 new_line sed_test_3 33333
[адрес [, адрес]] c текст — Удаляет выбранные строки и заменяет их на текст
$ sed -e ‘2 с new_line’ sed_test sed_test_1 11111 new_line sed_test_3 33333 $ sed -e ‘/3/ с new_line’ sed_test sed_test_1 11111 sed_test_2 22222 new_line
[адрес [, адрес]] d — Удаляет указанные строки.
$ sed -e ‘2 d’ sed_test sed_test_1 11111 sed_test_3 33333 $ sed -e ‘2!d’ sed_test sed_test_2 22222
[адрес] i текст — Вставить текст на место указанной строки.
$ sed -e ‘2 i new_line’ sed_test sed_test_1 11111 new_text sed_test_2 22222 sed_test_3 33333
[адрес [, адрес]] p (с флагом -n) выводит найденные строки.
$ sed -ne ‘2p’ sed_test sed_test_2 22222
[адрес] q — выход из sed.
[адрес [, адрес]] r файл — Читает файл и выдает его содержание на выход.
[адрес [, адрес]] s/регулярное_выражение/замена/флаги — Заменяет регулярное_выражение на замена-у с учётом флагов:
- g — во всей строке
- i — без учёта регистра
- p — выводить результат замены
$ sed -ne ‘s/t/T/g’ sed_test sed_TesT_1 11111 sed_TesT_2 22222 sed_TesT_3 33333 $ sed -e ‘s/9/d/g’ sed_test sed_test_d ddddd sed_test_d ddddd sed_test_d ddddd
[адрес [, адрес]] y/строка1/строка2/ — Заменяет все вхождения символов в строке1 соответсвующими символами из строки2. Длины строк должны быть одинаковыми.
$ sed -ne ‘y/est/EST/g’ sed_test SEd_TEST_1 11111 SEd_TEST_2 22222 SEd_TEST_3 33333
[адрес [, адрес]] — скобки группируют команды
[адрес] = — Выдаёт номера строк
Метки
: метка — сопоставить группе команд метку
b метка — переход к команде, обозначенной меткой метка, если метка отсутствует, то переход в конец командного файла.
t метка — переход к команде, обозначенной меткой метка только после удачной замены с помощью команды s///
Цикл выполнения
sed работает с двумя буферами данных: основным и вспомогательным. Изначально оба буфера пусты.
Работа с этими буферами осуществляется при помощи команд:\\`h’, `H’, `x’, `g’, `G’ `D’ h — Заменить содержимое вспомогательного буфера содержимым основного
H — Добавить новую строку к вспомогательному буферу и затем добавить содержимое основного буфера к содержимому вспомогательного
x — Поменять содержимое обоих буферов местами
g — Заменить содержимое основного буфера содержимым вспомогательного
G — Добавить новую строку к основному буферу и затем добавить содержимое вспомогательного буфера к содержимому основного
D — Удалить текст основного буфера до следующего символа перевода строки
N — Добавить новую строку к основному буферу, затем добавить туда следующую обрабатываемую строку
P — Вывести содержимое основного буфера до следующего символа перевода строки.
Более сложные примеры
Следующий скрипт меняет местами строки файла (первые строки становятся последними и наоборот)
$ cat tac.sed #!/usr/bin/sed -nf # начиная со второй строки, содержимое буфера (который уже содержит # все предыдущие строки) добавляется к текущей строке. 1! G # при достижении последней строки — печатаем $ p # Заносим данные в буфер опять h sed -nf tac.sed sed_test sed_test_3 33333 sed_test_2 22222 sed_test_1 11111
Считаем строки файла (выводим номер последней строки)
$ cat count.sed #!/usr/bin/sed -nf $=
$ sed -nf count.sed sed_test 3
$ cat revers.sed #!/usr/bin/sed -f # пропускаем строки из одной буквы /../! b # Переворачиваем строку. Добавляем по пустой строке перед и после текущей. s/%$@
*!G4;:%#`.*$/\ &\ / # Переносим первый символ в конец # цикл работает пока в средней строке есть символы. tx 😡 s/\(\\n.\)\(.*\)\(.\\n\)/\\3\\2\\1/ tx #удаляем лишние переносы строк s/\\n//g
Этот скрипт перемещает две буквы за раз.
$ sed -f revers.sed sed_test 11111 1_tset_des 22222 2_tset_des 33333 3_tset_des
Дополнительная информация
Подробнее о формате sed-скриптов можно узнать, прочитав мануал man sed или техническую документацию info sed.
Источник