Основные команды регулярных выражений

   Базовые знания о регулярных выражениях обсуждались в предыдущем разделе, а тремя ключевыми командами регулярных выражений являются 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, существуют профессиональные книги, знакомящие с этим командным инструментом. Знакомство с командами является необходимым условием для написания сценариев.Перед написанием сценария вы должны сначала понять результаты выполнения каждой команды, сотрудничать с оператором цикла оценки и реализовать сложные функции обработки в пакетном режиме.


рекомендация

отblog.51cto.com/superleedo/2551502
рекомендация