Базовые знания о регулярных выражениях обсуждались в предыдущем разделе, а тремя ключевыми командами регулярных выражений являются grep, sed и awk.
1) grep используется для фильтрации информации о строке
Функция: найти и распечатать строку, соответствующую ключевому слову
Параметры: -n выводить совпадающие строки и номера строк вместе; -v печатать строки, не соответствующие требованиям (инвертировать); -i регистронезависимо; -w печатать строки полных слов; -печать строки, соответствующие требованиям и Нижние n строк; -Bn печатает необходимые строки и верхние n строк; -Cn печатает требуемые строки, а также верхние и нижние n строк.
[centos7 the root @ ~] # grep -A2 / the passwd 'halt' / etc # останавливает строку, содержащую следующие две строки, и выводит
[root centos7 @ ~] # grep -B2 'halt' / etc / passwd # содержит Строка остановки и две строки над ней выводятся
[root @ centos7 ~] # grep -C2'halt '/ etc / passwd #
Вывести строку, содержащую остановку, и две строки выше и ниже [root @ centos7 ~] # grep -n 'root' / etc / passwd #
Отфильтровать строки и номера строк с помощью ключевого слова root [root @ centos7 ~] # grep -v'nologin '/ etc / passwd #
Отфильтровать строки без nologin [root @ centos7 ~ ] # grep '[0-9]' / etc / inittab #
Отфильтровать все строки, содержащие числа [root @ centos7 ~] # grep -v '[0-9]' / etc / inittab # Отфильтровать все строки, которые не содержат чисел Строка
[root @ centos7 ~] # grep -v '^ #'/ etc / inittab
# Отфильтровать строки, начинающиеся с не # [root @ centos7 ~] # grep'game $ '/ etc / inittab #
Отфильтровать строки, заканчивающиеся на game [root @ centos7 ~] # grep -v' ^ # '/ etc / crontab | grep -v '^ $' # Удалить все пустые строки и строки, начинающиеся с #
2) sed используется для фильтрации и замены текста строки
Sed - это онлайн-редактор, который обрабатывает текстовое содержимое по одной строке за раз. При обработке сохраните текущую обрабатываемую строку во временном буфере, затем используйте команду sed для обработки содержимого буфера и после завершения обработки отправьте содержимое буфера на экран. Затем обработайте следующую строку и повторяйте так до конца файла.
Роль: фильтровать запрос и изменять содержимое заменяющего текста
Параметры: -n будет перечислена только строка (или действие), которая была специально обработана sed; -e напрямую редактировать действия sed в режиме командной строки; -f напрямую записывать действия sed в файл; - Действие r sed поддерживает синтаксис расширенной регулярной нотации; -i напрямую изменяет содержимое прочитанного файла без вывода на терминал. a, за строкой может следовать строка, и эти строки появятся на новой строке (текущая следующая строка); c заменяется, за c может следовать строка, эти строки могут заменять между n1 и n2 Строка d удаляется, потому что она удалена, поэтому обычно нет содержимого после d; i вставляется и модифицируется, и строки могут быть соединены после i, и эти строки будут новой строкой; p печатается, и определенный выбор Вывод данных s; s заменить и заменить, напрямую заменить; g выбрать все содержимое.
Удалить: d command
[root @ centos7 ~] # sed '2d' app.txt # Удалить вторую строку файла
[root @ centos7 ~] # sed '2, $ d' app.txt # Удалить вторую строку файла, чтобы Все строки в конце
[root @ centos7 ~] # sed '$ d' app.txt # Удалить последнюю строку файла
[root @ centos7 ~] # sed '/ test /' d app.txt # Удалить все строки, содержащие test, и
заменить : s command
[centos7 the root @ ~] # Sed 'S / test / Prod / g' app.txt # файл заменяет все тестовые продукты, после чего замены не требуется g каждой строке a
[centos7 the root @ ~] # Sed - n's / ^ test / prod / p 'app.txt # В строке, начинающейся с test, замените test на prod и выведите
[root @ centos7 ~] # sed -n's / \ (love \ )able / \ 1rs / p 'app.txt # Все влюбленные будут заменены любовниками
[root @ centos7 ~] # sed's # you # your # g 'app.txt # Здесь разделителем является "#" вместо стандартного "/"
Выбранный диапазон строк: запятая
[root @ centos7 ~] # sed -n '/ test /, / chart / p' app.txt # вывести все строки из диапазона test и cheart
[root @ centos7 ~] # sed -n '6, / ^ test / p' app.txt # Вывести все строки из строки 6 в строку, начинающуюся с test
[root @ centos7 ~] # sed '/ test /, / chart / s / $ / test /'app.txt # Линия между тестом и западом, добавить тест в конце
Многоточечное редактирование: команда e
[root @ centos7 ~] # sed -e '1,5d' -e's / test / dev / 'app.txt # Удалить строки с 1 по 5 и заменить test на dev
Прочтите из файла: r command
[root @ centos7 ~] # sed '/ test / r 1.txt' app.txt # Сопоставьте тестовую строку, вставьте содержимое 1.txt в строку и выведите его вместе
Записать файл: w command
[root @ centos7 ~] # sed -n '/ test / w 1.txt' app.txt # Все строки, содержащие test в app.txt, записываются в 1.txt
Добавить команду: a command
[root @ centos7 ~] # sed '/ ^ test / a \\ ---> this is app.txt' app.txt <# Содержимое добавляется в конец строки, начиная с test
Вставить модификацию: i command
[root @ centos7 ~] # sed '2i love you' app.txt # Вставить love you в строку 2
[root @ centos7 ~] # sed -i's / \ $ / \! / G ' app.txt # Замените $ в конце строки на!
3) текст редактирования фильтра awk
Awk - это потоковый редактор, как и sed. Он также работает со строками в документе и обрабатывает текст построчно. Awk более мощный, чем sed, он может делать то же, что и sed, а также выполнять более сложные задачи.
1 форма команды
awk awk [-F | -f | -v] 'BEGIN {} // {command1; command2} END {}' file
[-F | -f | -v] Большой параметр, -F указывает разделитель, -f вызывает скрипт, -v определяет переменную var = value
'' # цитата блока кода
BEGIN # инициализация блока кода, в основном относится к глобальным переменным, устанавливает разделитель FS
// # соответствующий блок кода, это может быть строка или регулярное выражение
{ } # Блок кода команды, содержащий одну или несколько команд
; # Несколько команд разделяются точкой с запятой
END # Конечный блок кода, в основном для окончательного расчета или вывода сводной информации
2 Специальный символ переменной
$ 0 # Представляет всю текущую строку
$ 1 # Первое поле каждой строки
NF # Переменная количества полей
NR # Номер записи каждой строки, приращение многофайловой записи
FNR # Аналогично NR, многофайловая запись не увеличивается, каждый файл Все начинаются с 1
\ t # Символ табуляции
\ n # Символ новой строки
FS # Определите разделитель, когда BEGIN
RS # Введите разделитель записей, по умолчанию - символ новой строки
~ # Соответствие, а не точное сравнение по сравнению с ==
! ~ # Не совпадает , Неточное сравнение
== # Равно, все должны быть равны, точное сравнение
! = # Не равно, точное сравнение
&& # Логическое И
|| # Логическое ИЛИ
+ # При совпадении это означает 1 или более
/ [0-9] [ 0-9] + / # Две или более цифр
/ [0-9] [0-9] * / # Одна или несколько цифр
OFS # Разделитель полей вывода, по умолчанию также используется пробел
ORS # Разделитель записей вывода, По умолчанию - новая строка
-F '[: # /]' # Определить три разделителя
3 пример awk
= И т.д. Стоит отметить, что при сравнении чисел в двойных кавычках awk будет рассматривать их не как число, а как символ, а без двойных кавычек он будет считаться числом. [root @ centos7 ~] #
awk -F ':' '$ 3 == "0"' / etc / passwd #
Сопоставьте строку с символом 0 в третьем поле [root @ centos7 ~] # awk -F ':' '$ 3> = 500' / etc / passwd #
сопоставить строку, в которой третье поле больше числа 500 [root @ centos7 ~] # awk -F ':' '$ 7! = "/ sbin / nologin"' / etc / passwd # сопоставить седьмое поле не является логином Строка
[root @ centos7 ~] # awk -F ':' '$ 3 <$ 4' / etc / passwd #
Логическое сравнение двух сегментов [root @ centos7 ~] # awk -F ':' '$ 3> " 5 "&& $ 3 <" 7 "'/ etc / passwd #
Строки, которые одновременно удовлетворяют двум условиям соответствия [root @ centos7 ~] # awk -F': '' $ 3>" 5 "|| $ 7 ==" / bin / баш "'/ etc / passwd # Строка, которая соответствует одному из условий,
обычно используемых переменной
NF: сколько абзацев разделено разделителем, сколько абзацев NF и $ NF - значение последнего абзаца
NR: номер строки номер строки
[root @ centos7 ~ ] # голова -n3 / etc / passwd | awk -F ':' '{print NF}'
# Вывести общее количество абзацев [root @ centos7 ~] # head -n3 / etc / passwd | awk -F ':' '{print $ NF}' #
Вывести значение последнего абзаца [root @ centos7 ~] # head -n3 / etc / passwd | awk -F ':' '{print NR}'
# Номер выходной строки [root @ centos7 ~] # awk'NR > 20 '/ etc / passwd # Используйте номер строки 20 в качестве условия оценки
[root @ centos7 ~] # awk -F ':' 'NR> 20 && $ 1 ~ / ssh /' / etc / passwd # Строки вывода с NR больше 20 и ssh в первом абзаце
изменяют значение вычисляемого поля
[root @ centos7 ~] # head -n3 / etc / passwd | awk -F ':' '$ 1 = "root"'
# Первый абзац первых трех строк изменяется на корневой вывод [root @ centos7 ~] # head -n2 / etc / passwd | awk -F ':' ' {$ 7 = 3 $ + 4 $; вывести 7 $} '
# Вычислить поля и присвоить значения [root @ centos7 ~] # awk -F ':' '{(t = t + $ 3)}; END {print t}' / etc / passwd # Количество полей $ 3 и
[root @ centos7 ~] # awk -F ':' '{if ($ 1 == "root") print $ 0}' / etc / passwd # вывод строки, где $ 1 - корень
Содержимое этого раздела является основным. Приведенные выше примеры команд подходят для повседневного использования. Если вам нужны более сложные и мощные функции, вы можете посетить официальный веб-сайт командного инструмента. В особенности awk, существуют профессиональные книги, знакомящие с этим командным инструментом. Знакомство с командами является необходимым условием для написания сценариев.Перед написанием сценария вы должны сначала понять результаты выполнения каждой команды, сотрудничать с оператором цикла оценки и реализовать сложные функции обработки в пакетном режиме.