Похоже, у вас есть файл конфигурации. То, что вы могли бы сделать, похоже на то, что Адам Симеон / СЛМ предлагает:
sed -nr 's/[^=]+=\s*(.+)$/\1/p' filename
где [^=]
исключает все «=» символы, +
говорит один или более одного и того же типа характера, это с последующим фактическим =
, \s
любой пробел (включая вкладки \t
и новых линий \n
, \r\n
и равнинных пространств «», а *
значит ноль или более одного и того же типа , круглые скобки определяют, что находится внутри, чтобы поместить совпавшие символьные последовательности в замещающие заполнители \ 1, \ 2, ..., \ n, $
означает конец строки. Это следует типичному шаблону замены:. s/.../.../modifiers
Параметр командной строки -r
обозначает расширенный синтаксис регулярных выражений (для удобства) и -n
означает, что ничего не выводится до или без явного запроса. p
Модификатор печатает результат.
Вы можете сделать глобальный поиск с помощью g
модификатора, например:
sed -nr 's/[^=]+=\s*(.+)$/\1 /pg' filename # note the space after \1
так что вы получите строку , разделенную ' '
(может быть \n
, \t
или что там у вас) , которые вы можете обрабатывать легко.
Оба действительны при условии, что вашим значениям предшествует интервал символов уравнения до конца строки, и за ними не следуют комментарии или другие символы с семантикой, отклоняющейся от простого «значения».
Редактировать:
Я пока не могу комментировать посты других. Чтобы указать строку, просто передайте номер строки, в вашем случае 3, до s
или перед инициализирующей кавычкой char (как в vim).
sed -nr '3s/[^=]+=\s*(.+)$/\1/p' filename
Пожалуйста, посмотрите на info sed
. Например, 3.2 и 4.7 представляют для вас особый интерес.
awk
хороша - но только если у вас есть пробелы вокруг=
. Это не сработаетPOP3_SERVER_NAME=localhost
.