Команда 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