Что бы не лазить лишний раз в гугл стоит сделать себе заметки по работе с основными командами linux, сейчас редко но приходится парсить файлы или конфиги, такие команды ускоряют работу и упрощают нелегкую жизнь сисадмина
1. Просмотреть диапазон строк из файла
К примеру надо просмотреть строки в середине файла, такое нужно к примеру когда правишь конфиг и при старте сервиса получаешь сообщение что в строке 111 ошибка, просмотреть что в этой строке не заходя в файл, команда ниже выведет строки с 110 по 112 из файла apache2.conf
1 |
sed -n '110,112p' apache2.conf |
2. Исключить из диапазона строки при просмотре файла, команда ниже исключит из вывода строки с 110 по 112
1 |
sed -n '110,112d' apache2.conf |
3. Просмотр не последовательного диапазона строк из файла, команда ниже выведет на экран строки с 5 по 7 и с 10 по 13, как видите параметр “-е” позволяет задавать такие диапазоны
1 |
sed -n -e '5,7p' -e '10,13p' myfile.txt |
4. Замена слова или символа (базовая замена)
– замена слова version га story в файле
1 |
sed 's/version/story/g' myfile.txt |
– замена слова version га story в файле игнорируя регистр
1 |
sed 's/version/story/gi' myfile.txt |
-заменить в выводе два и более пробела на один:
1 |
ip route show | sed 's/ */ /g' |
сравните вывод команды ip route show
без sed и с sed:
5. Заменить слово или символы в диапазоне строк
заменить слово version на storu в диапазоне строк с 30 по 40
1 |
sed '30,40 s/version/story/g' myfile.txt |
6. Использование регулярных выражений (расширенная замена) -I
Иногда конфигурационные файлы загружаются с комменатриями. Что бы удалить все пустые строки или строки начинающиеся с # из конфигурационного файла apache достаточно выполнить:
1 |
sed '/^#\|^$\| *#/d' apache2.conf |
7. Использование регулярных выражений (расширенная замена) -II
Иногда необходимо заменить слова начинающиес с большой буквы или с маленькой на другое слово, например заменить zip или Zip на rar в файле myfile.txt
1 |
sed 's/[Zz]ip/rar/g' myfile.txt |
8. Просмотреть строки содержащие определенное выражение.
Бывают ситуации когда необходимо просмотреть лог файл за определенный день, к примеру secure лог в Centos Linux за 1 Июля:
1 |
sed -n '/^Jul 1/ p' /var/log/secure |
9. Вставить пустую строку в файл.
Вставить пустую строку для каждой не пустой стрки в файле при выводе на экран
1 |
sed G myfile.txt |
или две строки
1 |
sed 'G;G' myfile.txt |
10. Преобразования dos2unix с построчным редактированием
Файлы созданные или отреактированные в Windows редакторе при открытии в *nix среде как правило могут отображаться некорректно или содержать win символ перевода строки ^M что бы избавится от него достаточно выполнить команду:
1 |
sed -i 's/\r//' myfile.txt |
Помните что опция -i подавляет вывод на экран и заносит изменения в файл
11. Редактирование “на месте” с сохранением копии оригинала
В предыдущем примере изменения применялись опцией sed “-i” без сохранения оригинального файла, что бы сохранить оригинальный файл делаем:
1 |
sed -i'.orig' 's/this/that/gi' myfile.txt |
12. Поменять слова местами.
К примеру у нас есть файл содержащий Имя и Фамилию в формате “Имя, Фамилия” и нам необходимо поменять местами что бы стлоа “Фамилия, Имя”
1 |
sed 's/^\(.*\),\(.*\)$/\2\, \1/g' names.txt |
13. Заменить слово только если строка сравнения найдена.
Если необходимо заменить одно слово на друго, но только в определнной строке файла, которая содержит необходимое слово (если строка содержит /services/ – заменить start на stop):
1 |
sed '/services/ s/start/stop/g' msg.txt |
14. Выполнить две и более замены в одной команде.
К примеру необходимо в файле произвести две и более замены одной командой (заменяем that на this и line на verse)
1 |
sed -i 's/that/this/gi;s/line/verse/gi' myfile.txt |
15. Комбинируем sed и другие команды
Естественно sed можно комбинировать с другими командами для создания более мощных команд. К примеру из ПРИМЕР#4 мы можем извлечь свой IP адрес:
1 |
ip route show | sed -n '/src/p' | sed -e 's/ */ /g' | cut -d' ' -f9 |
Понятно что эту же операцию можно сделать и прощее или по другому, но понимание как работает и что можно сделать с использованием sed зачастую крепко может облегчить задачу и жизнь.