2013-12-01 3 views
0

Я пытаюсь изменить файл .conf на сервере Linux, но в файле .conf нет разделов. Я хочу искать в паре ключ/значение для определенного ключевого слова, а затем удалять пару строк над этой строкой и некоторые строки ниже этой строки.Использование ConfigParser для удаления строк в файле конфигурации без разделов

Как я могу достичь этого, когда нет заголовков разделов? Должен ли я использовать ConfigParser?

Кроме того, во всем файле повторяются имена ключей. В приведенном ниже разделе кода я хочу найти «ключевое слово» в строке «каталог» и удалить две строки выше, а оставшуюся часть ниже.

database  ldbm 
loglevel  0 
directory  /home/name/NameServer/var/openldap-ldbm-CMDB-keyword 
suffix   "o=CMDB-keyword" 
suffix   "dc=CMDB-keyword,dc=com" 
rootdn   "cn=admin,o=CMDB-keyword" 
rootpw   (blahblah) 
schemacheck  on 
lastmod   off 
sizelimit  100000 
defaultaccess read 
dbnolocking 
dbnosync 
cachesize  100000 
dbcachesize  100000000 
dbcacheNoWsync 
index objectclass pres,eq              │ 
index default pres,eq               │ 
index termName pres,eq 
+0

вы открыты к использованию таких инструментов linux, как awk или grep? – iruvar

+0

Да, grep находится на сервере. Должен ли я использовать это вместо ConfigParser? –

+0

От этого зависит. Можете ли вы добавить больше контекста в фрагмент файла конфигурации выше. Когда вы говорите «удалите остальную часть материала ниже», сколько строк точно? – iruvar

ответ

0

Если предположить, что каждый блок начинается с database линии и заканчивается index termName pres,eq линии, это скрипты читает input.conf и записывает эти блоки в output.conf, которые не содержат directory....keyword линию

import re 
with open('input.conf') as f, open('output.conf', 'w') as o: 
    s = f.read() 
    for x in re.findall(r'^database.*?index termName pres,eq\n', s, 
    re.DOTALL | re.MULTILINE): 
      if not re.search(r'^directory.*keyword', x, re.MULTILINE): 
        o.write(x) 
Смежные вопросы