- Как в Linux вывести строку?
- Как вывести сходу информацию из двух созданных файлов?
- Как вывести некоторую строку файла в Linux?
- Как вывести 5-ый строку в Linux?
- Как вывести нужные строки в Linux из файла с помощью sed?
- Peter Leung, «Командная строка: маленькие хитрости от Linux Commando»
- 20 примеров использования потокового текстового редактора sed
- 1. Отобразить часть файла
- 2. Отобразить все кроме указанных строк.
- 3. Вывод каждой N строки начиная M строки .
- 4. Удаление строки из файла используя sed.
- 5. Удаление диапазона строк.
- 6. Удаление всех строк кроме указанных.
- 7. Вставка пустой строки/пробелов.
- 8. Поиск и замена строки.
- 9. Поиск и замена ВСЕХ найденных в файле слов.
- 10. Заменить n-ое вхождение шаблона строки.
- 11. Заменить текст на определенной строке.
- 12. Добавить строку до/после совпадения с заданным поиском.
- 13.Замена всей строки при совпадении поиска.
- Продвинутые опции sed
- 14. Запуск нескольких команд sed.
- 15. Создание резервной копии перед изменением файла.
- 16. Удаление текста начиная с указанного слова и заканчивая другим словом.
- 17. Добавление строк.
- 18. Удаление всех комментариев и пустых строк.
- 19. Получение списка пользователей из файла /etc/passwd.
- 20. Запрет перезаписи системных ссылок с помощью команды sed.
Как в Linux вывести строку?
Начнем с команды, с которой уже не однократно встречались, команда cat. Сначала посмотрим справку по данной команде с помощью man cat. Этая команда предназначена для объединения файлов и печати на стандартный вывод информации. Под стандартным выводом предполагается вывод на консоль информации. Так же можно увидеть, что у данной команды есть ключи.
Как вывести сходу информацию из двух созданных файлов?
А в справке было написано, что команда сможет объединять содержимое файлов.
cat hello1.txt hello2.txt > hello3.txt
cat hello3.txt
Мы вывели на стандартный вывод (консоль) содержание файлов и передали то, что на экране в новый файл hello3.txt. А затем просто вывели на консоль.
Как вывести некоторую строку файла в Linux?
При трейсе ошибки установки одного скрипта, возникла необходимость прочитать 98 строку файла. Делается это, ожидаемо, через команду вывода cat
# cat filename | head -n98 | tail -n1
где head -n предлагает сделать нужную строку, а tail -n задает сколько строк показать перед нужной. В данном варианте показана будет только одна строка.
То есть если нам необходимо вывести какой-никакой то сегмент строк, скажем, строки с 10 по 20, то выражение будет иметь вид
# cat filename | head -n20 | tail -n11
Как вывести 5-ый строку в Linux?
Если я хочу извлечь пятую строку файла, то делаю так:
$ head -n 5 имя_файла | tail -n 1
#!/bin/bash
for i in $(find /etc/ -type f);
do cat $i | head -n5 | tail -n1 >> ~/000
done
sort ~/000
Данный скрипт на bash хватит всё файлы из папки etc, с них берёт пятую строку и выводит в файл, который создаёт в домашнем каталоге, а затем сортирует.
Как вывести нужные строки в Linux из файла с помощью sed?
Тому, кто пишет много скриптов bash, довольно частенько приходится выбирать нужные строки из текста, например готовые блоки кода. Вчера я как раз обязан был извлечь первую строку из файла, назовем его somefile.txt.
$ cat somefile.txt
Line 1
Line 2
Line 3
Line 4
Это весьма просто сделать при помощи команды head:
$ head -1 somefile.txt
Line 1
Для более сложных задачек, например, извлечь вторую и третью строки из того же файла, команда head не подходит. Подавайте попробуем команду sed ? редактор потока (STream Editor). Моя первая попытка применить команду p (print) очутилась неудачной:
$ sed 1p somefile.txt
Line 1
Line 1
Line 2
Line 3
Line 4
Обратите внимание, что редактор отпечатывает весь файл, причем указанную первую строку печатает дважды. Почему? По умолчанию редактор перепечатывает на типовой вывод каждую строку вводимого файла. Четко заданная команда 1p приказывает печатать первоначальную строку. В итоге первая строка дублируется. Чтобы этого не происходило нужно подавить дефолтный вывод при поддержки опции -n, чтобы на выводе был только результат команды 1p:
$ sed -n 1p somefile.txt
Line 1
Можно пойти иным путем и удалить из файла все строки, кроме первой:
$ sed ‘1!d’ somefile.txt
Line 1
где ‘1!d’ значит: если строка не является первой (!), то подлежит удалению. Обратите внимания на кавычки (одинарные). Они асбсолютно необходимы, так как без них конструкция 1!d вызовет последнюю запускавшуюся в шелле команду, начинающуюся с буквы d. Для извлечения многих строк, скажем, со второй по четвертую, можно поступить одним из следующих способов:
$ sed -n 2,4p somefile.txt
$ sed ‘2,4!d’ somefile.txt
Перерыв обозначается через запятую включительно. А если строки не идут друг за другом, например, с первоначальной по вторую и еще четвертую?
$ sed -n -e 1,2p -e 4p somefile.txt
Peter Leung, «Командная строка: маленькие хитрости от Linux Commando»
Тому, кто пишет много скриптов bash, часто приходится выбирать нужные строки из текста, например готовые блоки кода. Вчера я как раз должен был извлечь первую строку из файла, назовем его somefile.txt.
$ cat somefile.txt Line 1 Line 2 Line 3 Line 4
Это очень просто сделать при помощи команды head:
$ head -1 somefile.txt Line 1
Для более сложных задач, например, извлечь вторую и третью строки из того же файла, команда head не подходит.
Давайте попробуем команду sed ≈ редактор потока (STream Editor).
Моя первая попытка применить команду p (print) оказалась неудачной:
$ sed 1p somefile.txt Line 1 Line 1 Line 2 Line 3 Line 4
Обратите внимание, что редактор печатает весь файл, причем указанную первую строку печатает дважды. Почему? По умолчанию редактор перепечатывает на стандартный вывод каждую строку вводимого файла. Четко заданная команда 1p приказывает печатать первую строку. В итоге первая строка дублируется.
Чтобы этого не происходило нужно подавить дефолтный вывод при помощи опции -n, чтобы на выводе был только результат команды 1p:
$ sed -n 1p somefile.txt Line 1
Можно пойти другим путем и удалить из файла все строки, кроме первой:
$ sed '1!d' somefile.txt Line 1
где ‘1!d’ означает: если строка не является первой (!), то подлежит удалению. Обратите внимания на кавычки (одинарные). Они совершенно необходимы, так как без них конструкция 1!d вызовет последнюю запускавшуюся в шелле команду, начинающуюся с буквы d.
Для извлечения нескольких строк, скажем, со второй по четвертую, можно поступить одним из следующих способов:
Интервал обозначается через запятую включительно.
А если строки не идут друг за другом, например, с первой по вторую и еще четвертую?
$ sed -n -e 1,2p -e 4p somefile.txt Line 1 Line 2 Line 4
Если вам известны иные способы выбирать нужные строки из файлов, сообщите, пожалуйста, в комментариях.
Послесловие переводчика:
Блестящий пример нестандартного подхода продемонстрировал в комментариях к этой статье некий Chris:
$ head -n 5 имя_файла | tail -n 1
А правда, здорово! И никаких заумных команд не надо с их километровыми манами. Кстати так и нужные блоки подряд идущих строк можно извлекать.
20 примеров использования потокового текстового редактора sed
Компьютерное
Команда sed (потоковый редактор) это очень мощная утилита работающая в Linux/Unix системах. В основном он используется для поиска и замены текста , но так же может применяться и для других манипуляций, таких как вставка, удаление, поиск и т.п. С sed, вы можете отредактировать файл не выполняя полного его открытия. В sed так же поддерживаются регулярные выражения, которые превращают sed в мощное средство манипуляцией текста.
В этой статье приведу несколько примеров использования SED. Основной синтаксис использования sed:
sed ОПЦИИ… [СКРИПТ] [ВХОДНОЙ ФАЙЛ…]
1. Отобразить часть файла
С помощью sed мы можем просмотреть не весь файл, а только его часть. Посмотреть нужные строки можно так:
Опция n указывает что требуется вывести часть файла, а опция p, что требуется вывести только строки с 22 по 29.
2. Отобразить все кроме указанных строк.
Опция d указывает что надо удалить из вывода строки с 22 по 29.
3. Вывод каждой N строки начиная M строки .
Теперь, например выведем каждую 3-ю строку начиная со строки 2-ой.
4. Удаление строки из файла используя sed.
Где N это номер строки а опция d указывает что надо удалить эту строку. Чтобы удалить самую последнюю строку в файле выполните команду:
5. Удаление диапазона строк.
Данная команда удалит строки с 29 по 34 из файла testfile.txt
6. Удаление всех строк кроме указанных.
Чтобы удалить все строки в файле, кроме нужных используйте «!»
Здесь опция «!» означает отрицание, то есть меняет значение на противоположное. Получается что мы НЕ удаляем указанные строки. Поэтому все линии кроме 29-34 будут удалены из файла testfile.txt.
7. Вставка пустой строки/пробелов.
Для добавления пустой строки после каждой НЕ пустой строки используем опцию «G»
8. Поиск и замена строки.
Для поиска и замены найденной строки в файле:
sed 's/danger/safety/' testfile.txt
В этом примере мы ищем слово danger и сразу меняем его на слово safety в каждой строке, но только в первом найденном вхождении.
9. Поиск и замена ВСЕХ найденных в файле слов.
Для замены слова полностью во всём файле используем опции «g» в комбинации с «s»
sed 's/danger/safety/g' testfile.txt
10. Заменить n-ое вхождение шаблона строки.
Мы также можем заменить строку при n-ом найденном. Например заменим «danger» на «safety» только на второе появление в поиске:
sed 's/danger/safety/2' testfile.txt
Для замены «danger» на «safety» во втором найденном результате в КАЖДОЙ строке файла:
sed 's/danger/safety/2g' testfile.txt
11. Заменить текст на определенной строке.
sed '4 s/danger/safety/' testfile.txt
Здесь мы явно указали что надо на 4 строке в файле testfile.txt заменить первое найденное слово danger на слово safety. Так же мы можем указать диапазон строк для поиска и последующей замены:
sed '4-9 s/danger/safety/' testfile.txt
12. Добавить строку до/после совпадения с заданным поиском.
Для добавления новой строки с неким содержимым после каждого найденного совпадения которое мы задали искать используйте опцию «a«:
sed '/danger/a "Это новая строка с текстом после найденного слова"' testfile.txt
Для добавления новой строки с неким содержимым перед каждым найденным совпадением которое мы задали искать используйте опцию «i«:
sed '/danger/i "Это новая строка с текстом вставленная до найденного совпадения поиска" ' testfile.txt
13.Замена всей строки при совпадении поиска.
Чтобы изменить целую строку на новую строку при совпадении шаблона поиска, нам нужно использовать опцию «c«:
sed '/danger/c "Строка со словом danger будет заменена на эту строку" ' testfile.txt
Продвинутые опции sed
14. Запуск нескольких команд sed.
Если нам нужно выполнить несколько выражений sed, мы можем использовать опцию «e» для объединения команд sed в цепочку:
sed -e 's/danger/safety/g' -e 's/hate/love/' testfile.txt
15. Создание резервной копии перед изменением файла.
Для создания резервной копии файла перед его изменением используем опцию «-i.bak«:
sed -i.bak -e 's/danger/safety/g' testfile.txt
Этак команда выполнит редактирование файла, но перед этим создаст его копию с расширением .bak. Вы можете, конечно же, использовать любое другое расширение.
16. Удаление текста начиная с указанного слова и заканчивая другим словом.
Чтобы удалить строку файла, начинающуюся с определенного слова и заканчивая другим словом выполните:
sed -e 's/danger.*stops//g' testfile.txt
В этом примере danger — слово начиная с которого будет удаляться, stops — где удаление завершится. Выражение «.*» указывает что между этими двумя словами может быть любое количество слов.
17. Добавление строк.
Чтобы добавить контент перед каждой строкой с помощью sed & regex, используйте команду:
sed -e 's/.*/testing sed &/' testfile.txt
Так мы перед каждой строкой добавим текст «testing sed».
18. Удаление всех комментариев и пустых строк.
Для удаления всех закомментированных строк (например начинающихся с #), а так же всех пустых строк выполните:
Для удаления только комментариев:
19. Получение списка пользователей из файла /etc/passwd.
Данная команда выведет на экран список пользовательских имён.
20. Запрет перезаписи системных ссылок с помощью команды sed.
При выполнении команды «sed -i» если вы редактируете не сам файл, а ссылку на него, файл ссылки будет удален и на его месте появится самый обычный файл. Чтобы этого не произошло, вам следует пользоваться опцией «—follow-symlinks»
К примеру мы захотели отключить SELinux на сервере с CentOS или RHEL:
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
В этом примере sed проследует по символьной ссылке коей на самом деле является указанный файл «/etc/sysconfig/selinux» и отредактирует тот файл, на который эта ссылка указывает, вместо того чтобы редактировать файл ссылки как настоящий.