Необходимо извлечь имена записей из файла для заполнения списка или переменной

#regex #bash #grep #config

#регулярное выражение #bash #grep #конфигурация

Вопрос:

У меня есть этот конфигурационный файл с именами записей, заключенными в квадратные скобки : [] . Мне нужно извлечь каждое имя записи в список или переменную для использования в for цикле. Все еще новичок и возится с некоторыми командами. У меня такое чувство grep , что это мой ответ, но я не знаю, с чего начать. Любая помощь будет оценена.

 [dropbox]
type = dropbox
scope =  dropbox
token = {"access_token":"my_token"}

[drive2]
type = drive
scope = drive
token = {"access_token":"other_token"}
 

Ответ №1:

Вы можете использовать sed:

 sed -rn 's/(^[)(.*)(]$)/2/p' configfile
 

Включите регулярное выражение с помощью -r . Разделите каждую строку файла (configfile) на три раздела — начало строки, [ затем что-нибудь (.*) и затем], конец строки. Замените всю строку только на второй раздел и выведите.

Комментарии:

1. Идеальный. Делает именно то, что мне нужно, и я думаю, что даже понимаю это.

Ответ №2:

Вы можете использовать GNU grep :

 echo "[dropbox]ntype = dropbox" | grep -Po '[K[^]]*'
# Prints: dropbox
 

Здесь grep используются следующие параметры:
-P : Используйте регулярные выражения Perl.
-o : Выводите только совпадения, 1 совпадение на строку, а не целые строки.

[K[^]]* : литерал [ , экранированный, за которым следует специальный символ, K который сообщает механизму регулярных выражений притвориться, что совпадение начинается с этой точки, за которой следует любой ] несимвол, повторяющийся 0 или более раз ( [^]]* ) .

СМОТРИТЕ ТАКЖЕ:
grep руководство