Команда sed используется в операционной системе unix/linux для редактирования файла или потока и выполняет множество функций, таких как поиск и замена, вставка, удаление. он сканирует файл или поток построчно и выполняет команду в каждой строке. В этом посте я исследую некоторые полезные команды sed с примерами.

Синтаксис

sed options [script] [inputfile]

Сделайте man своим другом, для справки или в случае сомнения используйте команду $man sed

Примеры

Рассмотрим текстовый файл rk.txt в качестве входных данных со следующим содержимым

java is a programming language, java has a good developer community  
java is easy learn java, java follows oo principles
java uses simple syntax, python uses simple syntax

1. Замена или подстановка строки

$sed 's/java/python/' rk.txt

По умолчанию sed заменяет только первое вхождение, поэтому приведенная выше команда заменит первое вхождение «java» на «python».
вывод:

python is a programming language, java has a good developer community  
python is easy learn java, java follows oo principles
python uses simple syntax, python uses simple syntax

2. Заменить или заменить n-е вхождение шаблона в каждой строке

$sed 's/java/python/2' rk.txt

Приведенная выше команда заменит второе вхождение «java» на «python» в каждой строке, если второе вхождение присутствует.
вывод:

java is a programming language, python has a good developer community  
java is easy learn python, java follows oo principles
java uses simple syntax, python uses simple syntax

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

$sed 's/java/python/g' rk.txt

Приведенная выше команда заменит все вхождения «java» на «python»
вывод:

python is a programming language, python has a good developer community  
python is easy learn python, python follows oo principles
python uses simple syntax, python uses simple syntax

4. Используйте sed с трубой

$cat rk.txt | sed 's/java/python/g'

Как и в случае со всеми другими командами Linux, вы можете использовать sed в конвейере, и именно в этом заключается реальная сила. вы можете использовать команду sed в пипсе вместо указания имени файла в качестве аргумента.
вывод:

python is a programming language, python has a good developer community  
python is easy learn python, python follows oo principles
python uses simple syntax, python uses simple syntax

5. Замена строки на определенном номере строки

$sed '2 s/java/python/g' rk.txt

Приведенная выше команда заменяет «java» на «python» только в 3-й строке файла.
вывод:

java is a programming language, java has a good developer community  
python is easy learn python, python follows oo principles
java uses simple syntax, python uses simple syntax

6. Замена строки в диапазоне строк

$sed '1,2 s/java/python/g' rk.txt

вывод:

python is a programming language, python has a good developer community  
python is easy learn python, python follows oo principles
java uses simple syntax, python uses simple syntax
$sed '2,$ s/java/python/g' rk.txt

Приведенная выше команда заменит вхождение «java» на «python» со 2-й строки до последней строки
вывод:

python is a programming language, python has a good developer community  
python is easy learn python, python follows oo principles
python uses simple syntax, python uses simple syntax

7. Печатать только измененные строки

$sed -n '2,$ s/java/python/gp' rk.txt

Приведенная выше команда заменит «java» на «python» со второй строки до последней и напечатает только измененные строки, в которых была выполнена замена. найдите флаг `-n'
вывод:

python is easy learn python, python follows oo principles
python uses simple syntax, python uses simple syntax

8. Напечатайте измененные строки дважды

$sed '2,$ s/java/python/gp' rk.txt

Приведенная выше команда заменит «java» на «python» со второй строки до последней строки и дважды напечатает измененные строки, в которых была выполнена замена.
Вывод:

java is a programming language, java has a good developer community  
python is easy learn python, python follows oo principles
python is easy learn python, python follows oo principles
python uses simple syntax, python uses simple syntax
python uses simple syntax, python uses simple syntax

9. Удаление n-й строки

$sed '2d' rk.txt

Приведенная выше команда удалит 2-ю строку из rk.txt
вывод:

java is a programming language, java has a good developer community  
java uses simple syntax, python uses simple syntax

10. Удаление строк в диапазоне

$sed '1,2d' rk.txt

Команда выше удалит строки с 1 по 2.
вывод:

java uses simple syntax, python uses simple syntax
$sed '2,$d' rk.txt

Вышеприведенная команда удалит строки со 2-й по последнюю.
вывод:

java is a programming language, java has a good developer community

11. Вставьте пустую строку после каждой строки

$sed G rk.txt

вывод:

java is a programming language, java has a good developer community  
java is easy learn java, java follows oo principles
java uses simple syntax, python uses simple syntax

Для вставки двух пустых строк используйте следующую команду

$sed 'G;G' rk.txt

12. Просмотр/печать строк в диапазоне

$sed -n '2,3p' rk.txt

Приведенная выше команда напечатает со 2-й по 3-ю строку из rk.txt
вывод:

java is easy learn java, java follows oo principles
java uses simple syntax, python uses simple syntax

Для печати n-й строки используйте следующее

$sed -n '2p' rk.txt

Команда выше напечатает вторую строку из rk.txt
вывод:

java is easy learn java, java follows oo principles

13. Просмотр/печать строк, кроме заданного диапазона

$sed '2,3d' rk.txt

Приведенная выше команда напечатает все строки из файла rk.txt, кроме строк со 2-й по 3-ю
вывод:

java is a programming language, java has a good developer community

14. Просмотр/печать непоследовательных строк/диапазона из файла

$sed -n -e '1p' -e '3p' rk.txt

Приведенная выше команда напечатает 1-ю и 3-ю строку из файла rk.txt
вывод:

java is a programming language, java has a good developer community  
java uses simple syntax, python uses simple syntax

Обратите внимание на флаг -e, используя этот флаг, мы можем добавить несколько команд редактирования, и каждая команда будет выполняться последовательно.

15. Редактирование файла на месте

$sed -i 's/java/python/g' rk.txt

Приведенная выше команда выполнит замену непосредственно в файле rk.txt, обратите внимание на флаг `-i', без этого флага операция редактирования не влияет на исходный файл.

16. Редактирование файла с резервной копией

$sed -i '.original' 's/java/python/g' rk.txt

Приведенная выше команда внесет изменения в исходный файл rk.txt и сделает резервную копию файла с расширением «.original». После выполнения вышеуказанной команды будут два файла rk.txt и rk.txt.original. Это рекомендуемый способ редактирования на месте, на случай, если мы допустим какую-либо ошибку, у нас будет файл резервной копии.

17. Регулярное выражение: вывести строку, соответствующую шаблону

$sed -n '/programming/ p' rk.txt

Приведенная выше команда напечатает все строки, в которых есть «программирование».
вывод:

java is a programming language, java has a good developer community

18. Удалить строки, соответствующие шаблону

sed  '/programming/ d' rk.txt

Приведенная выше команда удалит все строки, в которых есть «программирование».
вывод:

java is easy learn java, java follows oo principles
java uses simple syntax, python uses simple syntax

19. Заменить в строках, которые соответствуют заданному шаблону

$sed '/programming/ s/java/python/g' rk.txt

Приведенная выше команда заменит «java» на «python» в каждой строке, в которой есть «программирование».
вывод:

python is a programming language, python has a good developer community  
java is easy learn java, java follows oo principles
java uses simple syntax, python uses simple syntax