Поиск по сайту:

50 примеров команд sed


sed — это полезная функция обработки текста в GNU/Linux. Полная форма sed — Stream Editor. Многие типы простых и сложных задач по обработке текста можно легко выполнить с помощью команды sed. Любая конкретная строка в тексте или файле может быть найдена, заменена и удалена с помощью регулярного выражения с командой sed. Но эта команда временно выполняет все типы модификации, а исходное содержимое файла по умолчанию не изменяется. При необходимости пользователь может сохранить измененный контент в другой файл. В этом руководстве объясняются основные способы использования команды `sed` с использованием 50 уникальных примеров. Прежде чем приступить к этому руководству, вы должны проверить установленную версию `sed` в вашей операционной системе, выполнив следующую команду. Учебник разработан на основе GNU sed. Таким образом, эта версия `sed` потребуется для отработки примеров, показанных в этом руководстве.

sed --version

Следующий вывод показывает, что в системе установлен GNU Sed версии 4.4.

Синтаксис:

sed [options]…  [script] [file]

Если в команде `sed` не указано имя файла, скрипт будет работать со стандартными входными данными. Скрипт sed может выполняться без каких-либо опций.

Контент:

  1. Базовая замена текста с использованием «sed»

  2. Замените все экземпляры текста в определенной строке файла, используя опцию «g»

  3. Заменить второе вхождение только совпадения в каждой строке

  4. Заменить последнее вхождение только совпадения в каждой строке

  5. Заменить первое совпадение в файле новым текстом

  6. Заменить последнее совпадение в файле новым текстом

  7. Экранирование обратной косой черты в командах замены для управления поиском и заменой путей к файлам

  8. Замените полный путь ко всем файлам только именем файла без каталога

  9. Заменить текст, но только если в строке найден какой-то другой текст

  10. Заменить текст, но только в том случае, если какой-либо другой текст не найден в строке

  11. Добавьте строку перед совпадающим шаблоном, используя «\1».

  12. Удалить совпадающие строки

  13. Удалить совпадающую строку и 2 строки после совпадающей строки

  14. Удалить все пробелы в конце строки текста

  15. Удалить все строки, которые имеют совпадение два раза в строке

  16. Удалить все строки, которые имеют единственный пробел

  17. Удалить все непечатаемые символы

  18. Если в строке есть совпадение, добавьте что-нибудь в конец строки

  19. Если в строке есть совпадение, вставьте строку перед совпадением

  20. Если в строке есть совпадение, вставьте строку после совпадения

  21. Если совпадения нет, добавьте что-нибудь в конец строки

  22. Если нет совпадения, удалите строку

  23. Дублировать совпадающий текст после добавления пробела после текста

  24. Замените одну строку из списка новой строкой из другого списка.

  25. Заменить совпадающую строку строкой, содержащей новые строки

  26. Удалить новые строки из файла и вставить запятую в конце каждой строки

  27. Удалите запятые и добавьте новые строки, чтобы разделить текст на несколько строк.

  28. Найти совпадение без учета регистра и удалить строку

  29. Найти совпадение без учета регистра и заменить новым текстом

  30. Найти совпадение без учета регистра и заменить все прописные буквы того же текста

  31. Найти совпадение без учета регистра и заменить все строчные буквы того же текста

  32. Замените все символы верхнего регистра в тексте символами нижнего регистра

  33. Найдите число в строке и добавьте символ валюты после числа

  34. Добавляйте запятые к числам, имеющим более 3 цифр

  35. Замените символы табуляции на 4 символа пробела.

  36. Замените 4 последовательных пробела символом табуляции

  37. Обрезать все строки до первых 80 символов

  38. Найдите строковое регулярное выражение и добавьте после него стандартный текст.

  39. Поиск строкового регулярного выражения и второй копии найденной строки после него

  40. Запуск многострочных сценариев `sed` из файла

  41. Совпадение с многострочным шаблоном и замена новым многострочным текстом

  42. Заменить порядок двух слов, соответствующих шаблону

  43. Используйте несколько команд sed из командной строки

  44. Комбинируйте sed с другими командами

  45. Вставить пустую строку в файл

  46. Удалить все буквенно-цифровые символы из каждой строки файла.

  47. Используйте ‘&’ для сопоставления строки

  48. Переключить пару слов

  49. Сделать первый символ каждого слова заглавным

  50. Печатать номера строк файла

1. Базовая замена текста с помощью sed

Любая конкретная часть текста может быть найдена и заменена с помощью шаблона поиска и замены с помощью команды sed. В следующем примере «s» указывает на задачу поиска и замены. В тексте будет искаться слово «Bash», «Bash Scripting Language», и если слово существует в тексте, то оно будет заменено словом «Perl».

echo "Bash Scripting Language" | sed 's/Bash/Perl/'

В выводе этого выполнения в тексте присутствует слово «Bash». Таким образом, вывод — «Язык сценариев Perl».

Команду sed также можно использовать для замены любой части содержимого файла. Создайте текстовый файл с именем weekday.txt со следующим содержимым:

$ cat weekday.txt
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Следующая команда будет искать и заменять текст «Воскресенье» текстом «Воскресенье — выходной».

sed 's/Sunday/Sunday is holiday/' weekday.txt

В выходных данных этого выполнения в файле weekday.txt существует «Воскресенье», и это слово заменяется текстом «Воскресенье — выходной день» после выполнения вышеуказанной команды sed.

Перейти к началу

2. Заменить все экземпляры текста в определенной строке файла с помощью параметра «g»

Параметр «g» используется в команде sed для замены всех вхождений совпадающего шаблона. Создайте текстовый файл с именем python.txt со следующим содержимым, чтобы знать, как использовать параметр «g». Этот файл содержит слово «Python» несколько раз.

$ cat python.txt
Python is a very popular language.
Python is easy to use. Python is easy to learn.
Python is a cross-platform language

Следующая команда заменит все вхождения «Python» во второй строке файла python.txt. Здесь «Python» встречается два раза во второй строке.

sed '2 s/Python/perl/g' python.txt

Следующий вывод появится после запуска скрипта. Здесь все вхождения «Python» во второй строке заменены на «Perl».

Перейти к началу

3. Заменять только второе вхождение совпадения в каждой строке

Если какое-либо слово встречается в файле несколько раз, то конкретное вхождение слова в каждой строке можно заменить с помощью команды sed с номером вхождения. Следующая команда sed заменит второе вхождение шаблона поиска в каждой строке файла python.txt.

sed 's/Python/perl/g2' python.txt

Перейти к началу

4. Заменить только последнее вхождение совпадения в каждой строке

Создайте текстовый файл с именем «lang.txt» со следующим содержимым.

$ cat lang.txt
Bash Programming Language.  Python Programming Language. Perl Programming Language.
Hypertext Markup Language.
Extensible Markup Language.

Чтобы заменить только последний экземпляр «Программирование» в строке на «Сценарии», выполните команду sed следующим образом:

sed 's/\(.*\)Programming/\1Scripting/' lang.txt

Чтобы понять эту команду, обратите внимание, что соответствие шаблону в этой команде sed: \(.*\)Programming создаст группу захвата со всем текстом, соответствующим строке жадным образом до последнего экземпляра программирования. Эта группа захвата хранится как «\1» и упоминается в части замены sed: \1Scripting. Поэтому вся строка, совпадающая до и до последнего экземпляра «Программирование», будет снова включена в строку замены со словом «Сценарий», чтобы закончить строку. Это метод, чтобы заставить его работать, как показано в выводе:

Перейти к началу

5. Заменить первое совпадение в файле новым текстом

Следующая команда заменит только первое совпадение шаблона поиска «Python» на текст «perl». Здесь '1' используется для соответствия первому вхождению шаблона.

sed '1 s/Python/perl/' python.txt

Следующий вывод появится после выполнения вышеуказанных команд. Здесь. первое вхождение «Python» в первой строке заменяется на «perl».

Перейти к началу

6. Заменить последнее совпадение в файле новым текстом

Следующая команда заменит последнее вхождение шаблона поиска «Python» текстом «Bash». Здесь символ '$' используется для соответствия последнему вхождению шаблона.

sed -e '$s/Python/Bash/' python.txt

После выполнения вышеуказанных команд появится следующий вывод:

Перейти к началу

7. Экранирование обратной косой черты в командах замены для управления поиском и заменой путей к файлам

Необходимо экранировать обратную косую черту в пути к файлу для поиска и замены. Следующая команда sed добавит обратную косую черту (\) к пути к файлу.

echo /home/ubuntu/code/perl/add.pl | sed 's;/;\\/;g'

Путь к файлу «/home/ubuntu/code/perl/add.pl» предоставляется в качестве входных данных для команды sed, и после выполнения вышеуказанной команды появится следующий вывод:

Перейти к началу

8. Заменить полный путь ко всем файлам только именем файла без каталога

Имя файла можно очень легко получить из пути к файлу с помощью команды basename. Команду sed также можно использовать для извлечения имени файла из пути к файлу. Следующая команда извлечет имя файла только из пути к файлу, предоставленного командой echo.

echo "/home/ubuntu/temp/myfile.txt" | sed 's/.*\///'

Следующий вывод появится после выполнения вышеуказанной команды. Здесь имя файла «myfile.txt» печатается в качестве вывода.

Перейти к началу

9. Заменить текст, но только если в строке есть другой текст

Создайте файл с именем «dept.txt» со следующим содержимым, чтобы заменить любой текст на основе другого текста:

dept.txt

$ cat dept.txt
List of Total Students:

CSE - Count
EEE - Count
Civil - Count

В следующей команде sed используются две команды замены. Здесь текст «Количество» будет заменен на «100» в строке, содержащей текст «CSE», а текст «Количество» будет заменен на «70» в строке, содержащей шаблон поиска «ЕЕЕ». .

sed  -e '/CSE/ s/Count/100/; /EEE/ s/Count/70/;' dept.txt

Следующий вывод появится после запуска вышеуказанных команд:

Перейти к началу

10. Заменить текст, но только в том случае, если какой-либо другой текст не найден в строке

Следующая команда sed заменит значение «Count» в строке, не содержащей текста «CSE». Файл dept.txt содержит две строки, не содержащие текста «CSE». Таким образом, текст «Count» будет заменен на 80 в двух строках.

sed -i -e '/CSE/! s/Count/80/;' dept.txt

Вывод:

После выполнения вышеуказанных команд появится следующий вывод:

Перейти к началу

11. Добавьте строку до и после шаблона соответствия, используя ‘\1’

Последовательность совпадающих шаблонов команды `sed` обозначается как ‘\1’, ‘\2’ и так далее. Следующая команда sed будет искать шаблон «Bash», и если шаблон совпадает, то к нему будет обращаться «\1» в части замены текста. Здесь текст «Bash» ищется во входном тексте, и один текст добавляется до, а другой текст добавляется после «\ 1».

echo "Bash language" | sed  's/\(Bash\)/Learn \1 programming/'

Следующий вывод появится после выполнения вышеуказанной команды. Здесь текст «Learn» добавляется перед «Bash», а текст «programming» добавляется после «Bash».

Перейти к началу

12. Удалить совпадающие строки

Параметр «d» используется в команде sed для удаления любой строки из файла. Создайте файл с именем «os.txt» и добавьте следующее содержимое, чтобы проверить функцию опции «d».

$ cat os.txt
Windows

Linux

Android

OS

Следующая команда sed удалит те строки из файла os.txt, которые содержат текст «ОС»:

sed '/OS/d' os.txt

После выполнения вышеуказанных команд появится следующий вывод:

Перейти к началу

13. Удалить совпадающую строку и две строки после совпадающей строки

Следующая команда удалит три строки из файла os.txt, если найден шаблон «Linux» . os.txt содержит текст Linux во второй строке. Итак, эта строка и следующие две строки будут удалены.

sed '/Linux/,+2d' os.txt

После выполнения вышеуказанной команды появится следующий вывод:

Перейти к началу

14. Удалить все пробелы в конце строки текста

Теперь мы можем запустить пример команды sed ниже, чтобы удалить пробелы с конца строки каждой строки. Мы будем использовать командную строку -i для редактирования/обновления файла на месте для этого примера, чтобы навсегда внести изменения:

sed -i 's/[[:blank:]]*$//' os.txt

Перейти к началу

15. Удалите все строки, в которых есть совпадение два раза в строке

В этом примере мы сначала создаем текстовый файл с именем input.txt со следующим содержимым. Этот пример кода удалит те строки файла, которые содержат шаблон поиска, два раза.

$ cat input.txt
PHP is a server-side scripting language.
PHP is an open-source language and PHP is case-sensitive.
PHP is platform-independent. PHP is faster.

В этом примере используются две команды sed для удаления тех строк, которые содержат шаблон «php» два раза. Первая команда sed заменит второе вхождение «php» в каждой строке на «dl». Затем мы передаем первый вывод sed во вторую команду sed в качестве ввода. Вторая команда sed удалит те строки, которые содержат специальный сигнальный текст «dl». «dl» используется в этом примере как сигнал для «удалить строку», но в тексте также может быть «dl», так что это немного опасно. Для производственной системы рассмотрите возможность использования кода типа «aNh4JPrSf3EXmdkKDpyz8K5u» вместо «dl», чтобы быть более случайным или более причудливым трюком, который вы создаете, чтобы избежать несчастных случаев.

sed  's/php/dl/i2;t' input.txt | sed '/dl/d'

Для этого примера выходных данных файл input.txt содержит две строки, содержащие шаблон, два раза php. Таким образом, после выполнения вышеуказанных команд появится следующий вывод:

Перейти к началу

16. Удалить все строки, содержащие только пробелы

Для этого примера мы добавляем несколько пустых строк в содержимое, чтобы проверить этот пример в файле «input.txt». Здесь «^$» используется для поиска пустых строк в файле «input.txt».

$ cat input.txt
PHP is a server-side scripting language.

PHP is an open-source language and PHP is case-sensitive.

PHP is platform-independent. PHP is faster.

Теперь мы запускаем команду sed для удаления пустых строк:

sed '/^$/d' input.txt

После выполнения вышеуказанных команд появится следующий вывод:

Перейти к началу

17. Удалить все непечатаемые символы

Непечатаемые символы можно удалить из любого текста, заменив непечатаемые символы на нет. В этом примере используется класс [:print:] для определения непечатаемых символов. ‘\t’ — это непечатаемый символ, и его нельзя проанализировать напрямую с помощью команды echo. Для этого в переменной $tab присваивается символ ‘\t’, который используется в команде echo. Вывод команды echo отправляется в команду sed, которая удалит символ «\t» из вывода.

$ tab=$'\t'
$ echo Hello"$tab"World
$ echo Hello"$tab"World | sed 's/[^[:print:]]//g'

Следующий вывод появится после выполнения вышеуказанных команд. Первая команда echo напечатает вывод с пробелом табуляции, а команда sed распечатает вывод после удаления пробела табуляции.

Перейти к началу

18. Если в строке есть совпадение, добавьте что-нибудь в конец строки

Убедитесь, что у вас есть файл «os.txt» со следующим содержимым:

$ cat os.txt
Windows
Linux
Android
OS

Следующая команда добавит «10» в конце строки, содержащей текст «Windows» в файле «os.txt»:

sed '/Windows/ s/$/ 10/' os.txt

После выполнения команды появится следующий вывод:

Перейти к началу

19. Если в строке есть совпадение, вставьте строку перед текстом

Убедитесь, что у вас есть файл input.txt для этого примера:

$ cat input.txt
PHP is a server-side scripting language.
PHP is an open-source language and PHP is case-sensitive.
PHP is platform-independent. PHP is faster.

Следующая команда sed будет искать текст «PHP не зависит от платформы» в файле «input.txt». Если файл содержит этот текст, перед этой строкой будет вставлено «PHP — это интерпретируемый язык».

sed '/PHP is platform-independent/ s/^/PHP is an interpreted language.\n/' input.txt

После выполнения вышеуказанных команд появится следующий вывод:

Перейти к началу

20. Если в строке есть совпадение, вставьте строку после этой строки

Следующая команда sed будет искать текст «Linux» в файле «os.txt», и если текст существует в какой-либо строке, после этой строки будет вставлен новый текст «Ubuntu». . Сначала создайте файл «os.txt»:

$ cat os.txt
Windows
Linux
Android
OS
sed 's/Linux/&\nUbuntu/' os.txt

Следующий вывод появится после выполнения вышеуказанных команд с добавленной новой строкой, вставленной с новым текстом, и с сохранением всего старого текста из специальной переменной «&», которая включает все совпадение:

Перейти к началу

21. Если совпадения нет, добавьте что-нибудь в конец строки

Следующая команда sed будет искать те строки в файле os.txt, которые не содержат текста «Linux», и добавит текст «Операционная система» в конце этих строк. Здесь символ «$» используется для обозначения конца строки, в которой будет заменен новый текст. Убедитесь, что у вас есть файл «os.txt»:

$ cat os.txt
Windows
Linux
Android
OS

А затем выполните команду:

sed '/Linux/! s/$/ Operating System/' os.txt

Следующий вывод появится после выполнения вышеуказанных команд. В файле os.txt есть три строки, которые не содержат текста «Linux», и новый текст добавляется в конце этих строк.

Перейти к началу

22. Если нет совпадения, удалите строку

Создайте файл с именем «web.txt» и добавьте следующее содержимое.

$ cat web.txt
HTML 5
Javascript
CSS
PHP
MySQL
JQuery

Эта команда sed удалит строки, не содержащие соответствующий шаблон.

sed '/CSS/!d' web.txt

Следующий вывод появится после выполнения вышеуказанных команд. В файле есть одна строка, содержащая текст «CSS». Таким образом, вывод содержит только одну строку. Если вы измените шаблон с «CSS» на «J», вы увидите 2 строки вывода.

sed '/J/!d' web.txt

Перейти к началу

23. Дублировать совпадающий текст после добавления пробела после текста

Следующая команда sed выполнит поиск подходящего слова «очень» в файле «python.txt», и если слово существует, то оно будет снова вставлено как дубликат . Здесь символ ‘&’ представляет текст совпадения, и мы добавляем его дважды для дублирования. Убедитесь, что у вас есть «python.txt»:

$ cat python.txt
Python is a very popular language.
Python is easy to use. Python is easy to learn.
Python is a cross-platform language

Вот код:

sed -e 's/very /&&/g' python.txt

Перейти к началу

24. Заменить один список строк новой строкой из другого списка

Вы должны создать два файла списка для тестирования этого примера. Создайте два текстовых файла с именами «list1.txt» и «list2» и добавьте следующее содержимое.

$ cat list1.txt
1001:Jafar Ali
1023:Nir Hossain
1067:John Michel
$ cat list2.txt
1001    CSE     GPA-3.63
1002    CSE     GPA-3.24
1023    CSE     GPA-3.11
1067    CSE     GPA-3.84

Мы сделаем этот процесс простым из сложного, разбив его на маленькие шаги. sed может принимать список команд подстановки в качестве входных данных файла, поэтому наш подход заключается в том, чтобы сначала создать файл со списком соответствующих команд подстановки синтаксиса sed с 's 'оператор подстановки. Вот простой код для создания командного файла с помощью другой команды Linux под названием awk с низкой сложностью. Обратите внимание, что это кошка исходного файла, переданная в awk, а вывод перенаправлен на «command.txt»:

cat list1.txt | awk -F: '{printf("s/%s/%s/\n", $1, $2)}' > command.txt

Создав файл «command.txt», мы можем легко запустить этот список замен в «list2.txt» с помощью простой команды sed:

sed -f command.txt list2.txt

Перейти к началу

25. Замените совпадающую строку строкой, содержащей символы новой строки

Следующая команда будет принимать данные от команды echo и искать слово «Python» в тексте. Если слово существует в тексте, то новый текст «Добавленный текст» будет вставлен с новой строкой в новом тексте. Вот пример кода:

echo "Bash Perl Python Java PHP ASP" | sed 's/Python/Added Text\n/'

Перейти к началу

26. Удалить новые строки из файла и вставить запятую в конце каждой строки

Следующая команда sed заменит каждую новую строку запятой в файле os.txt.

$ cat os.txt
Windows
Linux
Android
OS

Здесь параметр '-z' используется, чтобы указать sed интерпретировать ввод с символом NULL, разделенным каждой строкой, вместо новой строки, что позволяет в дальнейшем манипулировать символами новой строки в текст без помех. Затем мы делаем простую замену всех символов новой строки ‘\n’ запятыми:

sed -z 's/\n/,/g' os.txt

Перейти к началу

27. Удалите запятые и добавьте новую строку, чтобы разделить текст на несколько строк

Следующая команда sed возьмет разделенную запятыми строку из команды echo в качестве входных данных и заменит все запятые символами новой строки.

echo "Kaniz Fatema,30th,batch" | sed "s/,/\n/g"

Следующий вывод появится после выполнения вышеуказанной команды. Входной текст содержит три данных, разделенных запятыми, которые заменяются новой строкой и печатаются в три строки:

Перейти к началу

28. Найти совпадение без учета регистра и удалить строку

Индикатор 'I' используется в команде sed для совпадения без учета регистра, которое означает игнорирование регистра. Следующая команда sed будет искать строки, содержащие слово «linux», без учета регистра, и удалять строку из вывода. Настройте свой «os.txt», сначала отметив заглавные буквы:

$ cat os.txt
Windows
Linux
Android
OS

Затем выполните команду sed:

sed '/linux/Id' os.txt

Следующий вывод появится после выполнения вышеуказанной команды. «os.txt» содержит слово «Linux», которое соответствует шаблону, «linux» для поиска без учета регистра и удаляется:

Перейти к началу

29. Найти совпадение без учета регистра и заменить его новым текстом

Следующая команда sed возьмет ввод из команды echo и заменит слово «bash» на слово «PHP», используя индикатор без учета регистра в конце команда: 'i'.

echo "I like bash programming " | sed 's/Bash/PHP/i'

Перейти к началу

30. Найти совпадение без учета регистра и заменить его на все прописные буквы того же текста

«\U» используется в sed для преобразования любого текста во все буквы верхнего регистра. Следующая команда sed выполнит поиск слова «linux» в файле «os.txt» и, если слово существует, заменит его всеми буквами в верхнем регистре. Сначала создайте файл «os.txt».

$ cat os.txt
Windows
Linux
Android
OS

Теперь вот команда для запуска:

sed 's/\(linux\)/\U\1/Ig' os.txt

Эта команда использует группы захвата sed. \(linux\) фиксируется в \1 для повторного использования при замене. В нашем примере '\U' используется с '\1', чтобы преобразовать захваченное совпадение в верхний регистр. Также обратите внимание на команды Ig в конце инструкции, которые обеспечивают нечувствительность к регистру и глобальное сопоставление. Следующий вывод появится после выполнения вышеуказанных команд. Слово «Linux» в «файле os.txt» заменяется словом «LINUX»:

Перейти к началу

31. Найти совпадение без учета регистра и заменить его строчными буквами того же текста

Как и в предыдущем примере для верхнего регистра, мы выполним поиск без учета регистра и заменим соответствующий текст строчными буквами.

$ cat os.txt
Windows
Linux
Android
OS

'\L' используется в sed для преобразования любого текста во все строчные буквы, и снова мы используем группы захвата, чтобы найти соответствующий текст \(linux\) и сохранить как '\1' для нижнего регистра. Вот команда:

sed 's/\(linux\)/\L\1/Ig' os.txt

Перейти к началу

32. Замените все символы верхнего регистра в тексте символами нижнего регистра

Следующая команда sed выполнит поиск всех символов в файле «os.txt» и заменит символы строчными буквами, используя «\L». Ниже приведен файл данных:

$ cat os.txt
Windows
Linux
Android
OS

А вот команда sed для запуска:

sed  's/\(.*\)/\L\1/' os.txt

Следующий вывод появится после выполнения вышеуказанных команд. Обратите внимание, что это работает, потому что мы создаем группу захвата '\1' и используем для нее команду нижнего регистра: '\L' .

Перейти к началу

33. Найдите число в строке и добавьте любой символ валюты перед числом

Создайте файл с именем «items.txt» со следующим содержимым:

$ cat items.txt
HDD       100
Monitor   80
Mouse     10

Следующая команда sed будет искать первое совпадающее число в каждой строке файла «items.txt» и добавлять символ валюты «$» перед каждым числом.

$ cat items.txt
$ sed 's/\([0-9]\)/$\1/' items.txt

Перейти к началу

34. Добавляйте запятые к числам, состоящим более чем из 3 цифр

Следующая команда sed примет число из команды echo и добавит запятую после каждой группы из трех цифр, считая справа. Здесь ':a' указывает метку, а 'ta' используется для условной итерации процесса группировки по метке 'a' при совпадении правда.

echo "5098673" | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta'

В команде echo указано число 5098673. Это вспомогательная команда с условной меткой 'a', на которую ссылается 'ta'. Шаблон поиска — любая цифра, за которой следуют ровно 3 цифры. Шаблон замены, если он найден, представляет собой группу захвата '\1', разделенную ',', и группу захвата '\2'. Следовательно, цикл выполняется через всю строку, производящую вывод:

Перейти к началу

35. Заменяет символ табуляции на 4 символа пробела

Следующая команда sed заменит каждый символ табуляции четырьмя символами пробела. Символ ‘\t’ используется в команде sed для соответствия символу табуляции, а ‘g’ используется для глобальной замены всех совпадений. Вот код:

echo -e "1\t2\t3" | sed $'s/\t/    /g'

команда СЭД:

sed 's/\t/    /g' input.txt > output.txt

Перейти к началу

36. Заменяет 4 последовательных пробела символом табуляции

Вкладки обозначены цветными метками

Вот команда, используемая в этом примере для замены 4 пробелов вкладками:

sed -e 's/    /\t/g' input.txt  > output.txt

Перейти к началу

37. Обрезать все строки до первых 80 символов

Создайте текстовый файл с именем input.txt, содержащий строки длиной более 80 символов, чтобы проверить этот пример.

linux-console@u20:~$ cat input.txt
PHP is a server-side scripting language.
PHP is an open-source language and PHP is case-sensitive.
PHP is platform-independent. PHP is faster. I like to talk a lot and hate when i get cut off :)
sed 's/\(^.\{1,80\}\).*/\1/' input.txt

После запуска вышеуказанных команд появится следующий вывод, мы обрезаем длинные строки:

linux-console@u20:~$ sed 's/\(^.\{1,80\}\).*/\1/' input.txt
PHP is a server-side scripting language.
PHP is an open-source language and PHP is case-sensitive.
PHP is platform-independent. PHP is faster. I like to talk a lot and hate when i
linux-console@u20:~$

Перейти к началу

38. Найдите строковое регулярное выражение и добавьте после него стандартный текст

Следующая команда sed будет искать текст «привет» во входном тексте и добавлять текст «Джон» после этого текста.

echo "hello, how are you?" | sed 's/\(hello\)/\1 John/'

Этот код работает с использованием группы захвата '\(hello\)', указанной как '\1' в строке замены. После выполнения вышеуказанной команды появится следующий вывод:

linux-console@u22:~$ echo "hello, how are you?" | sed 's/\(hello\)/\1 John/'
hello John, how are you?
linux-console@u22:~$

Перейти к началу

39. Найдите строковое регулярное выражение и добавьте текст после второго совпадения в каждой строке

Вы можете заменить строку только на второе (или другое число) совпадение в каждой строке. Создадим файл данных input.txt:

linux-console@u22:~$ cat input.txt
PHP is a server-side scripting language.
PHP is an open-source language and PHP is case-sensitive.
PHP is platform-independent. PHP is faster.

Следующая команда sed будет искать текст «PHP» в каждой строке «input.txt» и заменять второе совпадение только в каждой строке текстом «Новый Текст добавлен».

sed 's/\(PHP\)/\1 (New Text added)/2' input.txt

Следующий вывод появится после выполнения вышеуказанных команд. Текст поиска «PHP» появляется два раза во второй и третьей строках файла «input.txt». Итак, текст «Добавлен новый текст» вставляется во вторую и третью строки после второго совпадения:

Перейти к началу

40. Запуск многострочных sed-скриптов из файла

Несколько команд sed могут быть сохранены в файле, и все команды могут быть выполнены вместе с помощью команды sed. Чтобы продемонстрировать это, убедитесь, что у вас есть файл input.txt:

linux-console@u22:~$ cat input.txt
PHP is a server-side scripting language.
PHP is an open-source language and PHP is case-sensitive.
PHP is platform-independent. PHP is faster.

Создайте файл с именем «sedcmd» и добавьте следующее содержимое:

s/PHP/ASP/
s/independent/dependent/

Выше в файл добавлены две команды sed. Одна команда заменит текст «PHP» на «ASP», другая команда заменит текст «независимый» на текст «зависимый». Параметр ‘-f’ используется в команде sed для выполнения всех команд из файла.

sed -f sedcmd  input.txt

После выполнения вышеуказанных команд появится следующий вывод:

Перейти к началу

41. Соответствие многострочному шаблону и замена новым многострочным текстом

Следующая команда sed будет искать многострочный текст «Linux\nAndroid», и если шаблон совпадает, совпадающие строки будут заменены новым многострочным текстом «Ubuntu\nAndroid Lollipop». Файл данных ‘os.txt’ находится здесь:

$ cat os.txt
Windows
Linux
Android
OS

Команда sed находится здесь:

sed '$!N;s/Linux\nAndroid/Ubuntu\nAndoid Lollipop/;P;D' os.txt

Здесь P и D используются для многострочной обработки. После выполнения вышеуказанных команд появится следующий вывод:

Перейти к началу

42. Заменить порядок двух слов в тексте, соответствующих шаблону

Следующая команда sed примет ввод двух слов из команды echo и изменит порядок этих слов.

echo "perl python" | sed -e 's/\([^ ]*\) *\([^ ]*\)/\2 \1/'

Этот код использует 2 группы захвата для разделения первого и второго слова пробелом, а затем в выходных данных порядок групп захвата меняется на противоположный: ‘\2’ ‘\1’. Вот результат:

linux-console@u22:~$ echo "perl python" | sed -e 's/\([^ ]*\) *\([^ ]*\)/\2 \1/'
python perl
linux-console@u22:~$

Перейти к началу

43. Выполнение нескольких команд sed из командной строки

'-e' в сочетании с несколькими командами sed, разделенными точкой с запятой, могут быть объединены вместе. Следующая команда sed примет текст из команды echo и заменит «Ubuntu» на «Kubuntu» и «Centos» на «Fedor».

$ echo "Ubuntu Centos Debian" | sed -e 's/Ubuntu/Kubuntu/; s/Centos/Fedora/'

Обратите внимание, что из-за разделительной точки с запятой несколько команд 's/' объединяются с одним sed. Следующий вывод появится после выполнения вышеуказанной команды, а «Ubuntu» и «Centos» будут заменены на «Kubuntu» и «Fedora»:

Перейти к началу

44. Комбинируйте sed с другими командами

Следующая команда объединит команду sed с командой cat. В этом примере команда cat используется для создания вывода на стандартный вывод. Первая команда sed будет получать данные из файла os.txt и отправлять выходные данные второй команде sed после замены текста «Linux» на «Fedora». '. Вторая команда sed заменит текст «Windows» на «Windows 10». Эти 3 команды объединены с linux pipe. Вот файл OS.txt:

$ cat os.txt
Windows
Linux
Android
OS

И вот команда для запуска:

cat os.txt | sed 's/Linux/Fedora/'| sed 's/windows/Windows 10/i'

После выполнения вышеуказанной команды появится следующий вывод:

Перейти к началу

45. Вставить пустую строку в файл

Создайте файл с именем «stdlist» со следующим содержимым:

$ cat stdlist
#ID     #Name
[101]   -Ali
[102]   -Neha

Опция sed 'G' используется для вставки пустых строк в файл после каждой существующей строки. Вы можете думать об этом как о преобразовании файла с одинарным интервалом в файл с двойным интервалом с пустой строкой между каждой существующей строкой. Вот пример команды:

sed G stdlist

Следующий вывод появится после выполнения вышеуказанных команд. Пустая строка вставляется после каждой строки файла:

linux-console@u22:~$ sed G stdlist
#ID     #Name

[101]   -Ali

[102]   -Neha

linux-console@u22:~$

Перейти к началу

46. Замените все буквенно-цифровые символы пробелом в каждой строке файла.

Следующая команда заменит все буквенно-цифровые символы пробелом в файле «stdlist», содержимое которого показано здесь:

$ cat stdlist
#ID     #Name
[101]   -Ali
[102]   -Neha

Эта команда sed работает путем сопоставления всех букв алфавита во всем диапазоне прописных и строчных букв, а также целых чисел и использует sed 's'. команда замены с глобальным модификатором 'g':

sed 's/[A-Za-z0-9]//g' stdlist

После выполнения вышеуказанных команд появится следующий вывод:

linux-console@u22:~$ sed 's/[A-Za-z0-9]//g' stdlist
#     #
[]   -
[]   -
linux-console@u22:~$

Перейти к началу

47. Используйте ‘&’ для печати совпадающей строки

Следующая команда будет искать слово, начинающееся с «L», и заменять текст, добавляя «Matched String is -» с совпавшим словом с помощью символа «&». В этом примере 'p' используется для печати измененного текста. Файл os.txt используется со следующим содержимым:

$ cat os.txt
Windows
Linux
Android
OS

Вот команда, обратите внимание на символ «^», используемый для обозначения начала строки:

sed -n 's/^L/Matched String is - &/p' os.txt

Обратите внимание, что при использовании команды ‘p’ в выводе печатаются только совпавшие строки:

Перейти к началу

48. Переключить пару слов в файле

Создайте текстовый файл с именем «course.txt» со следующим содержимым, содержащим пару слов в каждой строке:

$ cat course.txt
PHP            ASP
MySQL          Oracle
CodeIgniter    Laravel

Следующая команда переключит пару слов в каждой строке файла «course.txt».

sed  's/\([^ ]*\) *\([^ ]*\)/\2 \1/' course.txt

После переключения пары слов в каждой строке появится следующий вывод. Это набор из двух групп захвата, которые перевернуты в выходных данных подстановки ‘s’:

Перейти к началу

49. Делайте первый символ каждого слова заглавным

Следующая команда sed возьмет входной текст из команды echo и преобразует первый символ каждого слова в заглавную букву. Команда имеет 2 группы захвата, а затем использует только первую группу захвата:

echo "I like bash programming" | sed 's/\([a-z]\)\([a-zA-Z0-9]*\)/\u\1\2/g'

Следующий вывод появится после выполнения вышеуказанной команды. Вводимый текст «Мне нравится программирование на bash» печатается как «Мне нравится программирование на Bash» после заглавной буквы первого слова:

Перейти к началу

50. Печатать номера строк файла

Предположим, мы хотим напечатать номера строк в этом примере файла, показанном ниже:

$ cat os.txt
Windows
Linux
Android
OS

Символ «=» используется в команде sed для печати номера строки перед каждой строкой файла. Следующая команда напечатает содержимое файла os.txt с номером строки:

sed '=' os.txt

Следующий вывод появится после выполнения вышеуказанной команды. В файле os.txt четыре строки. Номер строки печатается перед каждой строкой файла:

Перейти к началу

Заключение

Различные варианты использования команды sed объясняются в этом руководстве на очень простых примерах. Вывод всех упомянутых здесь скриптов sed генерируется временно, а содержимое исходного файла остается неизменным. Но если вы хотите, вы можете изменить исходный файл, используя опцию –i или –in-place команды sed. Если вы новый пользователь Linux и хотите узнать об основных способах использования команды sed для выполнения различных задач по работе со строками, то это руководство поможет вам.

Часто задаваемые вопросы

Для чего используется команда sed?

Команда sed имеет множество различных применений. При этом в основном используется для замены слов в файле или поиска и замены. Самое замечательное в sed то, что вы можете искать слово в файле и заменять его, но вам даже не нужно открывать файл — sed просто делает все это за вас! Кроме того, его можно использовать для удаления. Все, что вам нужно сделать, это ввести слово, которое вы хотите найти, заменить или удалить, в sed, и оно появится для вас — затем вы можете заменить это слово или удалить все следы слова из вашего файла. sed — это фантастический инструмент, с помощью которого можно заменить такие вещи, как IP-адреса и все, что является очень конфиденциальным, что в противном случае вы не хотели бы помещать в файл. sed является обязательным для любого инженера-программиста, системного администратора или инженера-разработчика!

Что такое s и g в команде sed?

Проще говоря, функция s, которую можно использовать в sed, просто означает «заменить». После ввода «s» вы можете заменить или заменить все, что пожелаете — просто набрав «s», вы замените только первое вхождение слова в строке. Указание модификатора 'g' в конце команды sed приведет к глобальной замене (это то, что означает G). Имея это в виду, если вы укажете 'g', оно заменит каждое вхождение выбранного вами слова, а не только первое вхождение, которое является поведением по умолчанию, на 's' .

Как запустить скрипт sed?

Вы можете запустить sed-скрипт несколькими способами, но наиболее распространенным является командная строка. Здесь вы можете просто указать sed и файл, для которого вы хотите использовать команду. Это позволяет вам использовать sed для этого файла, позволяя вам находить, удалять и заменять по мере необходимости. Вы также можете использовать его в сценарии оболочки, и таким образом вы можете передать в сценарий все, что хотите, и он выполнит для вас команду поиска и замены. Это полезно, если вы не хотите указывать особо конфиденциальные данные внутри скрипта, поэтому вместо этого вы можете передать их как переменную.

Что такое группа захвата в sed

Группы захвата позволяют программисту создавать регулярные выражения для поиска совпадающего текста, а затем использовать эти совпадения в качестве назначенных переменных для выполнения операций с замененным выводом, таких как изменение порядка вывода, изменение с помощью команды капитализации или любая другая модификация sed. Группы захвата позволяют захватывать и повторно использовать динамический текст, соответствующий шаблону, сложными способами.

Статьи по данной тематике: