Фильтрация отображаемых строк редактором sed

Avatar of admin admin - 14.01.2018 19:43 - Полезные программы, Linux

В статье "Примеры использования редактора sed" мы рассмотрели разные приемы использования этого замечательного инструмента. Сегодня мы сфокусируем внимание на фильтрации строк при выводе на экран или при передаче данных для последующей обработки. Результат мы будем показывать на экране. Если понадобится изменить информацию непосредственно в файле, напоминаем о параметре -i:

sed -i 'условие' файл

Или для сохранения в другой файл:

sed -i 'условие' файл > другой_файл

Все или почти все методы, рассмотренные ниже, возможно комбинировать между собой, что позволяет добиться даже еще большей гибкости.

Файл для демонстрации используем тот же, что и в упоминавшейся статье:

cat ./test.txt

Какой-нибудь текст и еще текст
вторая строка: текст после которого тоже текст
это третья строка, содержащая текст и текст
строка номер 4 в которой есть текст содержащий текст
пятая строка - текст, текст и еще раз текст


Итак, начнем.

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

sed -ne '1p' ./test.txt

результат:
Какой-нибудь текст и еще текст

Параметр -n в данном и последующих примерах применяется для отмены вывода исходного содержимого файла.

Показать последнюю строку из файла

Символ "$" в регулярном выражении обозначает конец строки, sed интерпретирует это в данном случае как последнюю строку.

sed -ne '$p' ./test.txt

результат:
пятая строка - текст, текст и еще раз текст

Показать строку с указанным номером

Например, для вывода третьей строки из файла:

sed -ne '3p' ./test.txt

результат:
это третья строка, содержащая текст и текст

Если понадобится исключить указанную строку, применяем символ инверсии "!":

sed -ne '3!p' ./test.txt

выводятся все строки, коме указанной, т.е. третьей:

Какой-нибудь текст и еще текст
вторая строка: текст после которого тоже текст
строка номер 4 в которой есть текст содержащий текст
пятая строка - текст, текст и еще раз текст


Инверсию можно применить и в других примерах.

Вывод нескольких строк у указанным номером

Можно указать нужные номера строк, разделяя их символом ";" (точка с запятой):

sed -ne '2p;5p' ./test.txt

результат:

вторая строка: текст после которого тоже текст
пятая строка - текст, текст и еще раз текст


Таким образом можно указать любое количество номеров. Если указать несуществующий номер строки, он просто игнорируется.

Вывод диапазона строк

В этом случае номера строк разделяются запятой, как показано ниже:

sed -ne '2,4p' ./test.txt

получаем:

вторая строка: текст после которого тоже текст
это третья строка, содержащая текст и текст
строка номер 4 в которой есть текст содержащий текст

Или исключение диапазона:

sed -ne '2,4!p' ./test.txt

в итоге:

Какой-нибудь текст и еще текст
пятая строка - текст, текст и еще раз текст


Вывод строки/строк по условию

Отображаются строки, для которых условие будет соблюдено

sed -ne '/третья/p' ./test.txt

результат:

это третья строка, содержащая текст и текст

Вывод диапазон строк по условию

sed -ne '/Какой-нибудь/,/это третья/p' ./test.txt

строки с первой по третью:

Какой-нибудь текст и еще текст
вторая строка: текст после которого тоже текст
это третья строка, содержащая текст и текст


Вывод строк по регулярному выражению

строки, содержащие цифру (любую, в любой позиции):

sed -ne '/[0-9]/p' ./test.txt

имеем:

строка номер 4 в которой есть текст содержащий текст

Строки, начинающиеся с указанного условия (символ "^" указывает на начало строки):

sed -ne '/^строка/p' ./test.txt

в результате только одна строка, где "строка" находится в самом начале.
строка номер 4 в которой есть текст содержащий текст

Для расположения условия в конце строки нужно применить упоминавшийся уже символ "$".

sed -ne '/тоже текст$/p' ./test.txt

результат:

вторая строка: текст после которого тоже текст

Применение регулярных выражений - очень обширная тема, требующая отдельного рассмотрения.

Вывод строки, соответствующей  условию, и указанного количества строк после нее

sed -ne '/вторая/,+2p' ./test.txt

отобразится:

вторая строка: текст после которого тоже текст
это третья строка, содержащая текст и текст
строка номер 4 в которой есть текст содержащий текст

Новый комментарий

0 комментариев