2016-05-31 2 views
1

У меня есть файл YML с содержанием подобным,Как удалить основной блок из YML

test: 
    volumes: 
    - /u01/test-service/conf:/root/config 

testmanager: 
    port: 
    - "2222:80" 

Я хочу удалить тест или TestManager блок на основе некоторых условий. Вот выражение AWK я нашел here,

awk '{sub(/\r$/, "")} 
        $1 == "test:"{t=1} 
        t==1 && $1 != "test:" {t++; next} 
        t==2 && /:\s*$/{t=0} 
        t != 2' 

Это удаляет все испытуемый, но сохраняет строку «тест:». Что-то вроде этого,

reportservice: 
reportmanager: 
    port: 
    - "2222:80" 

Как это исправить? Пожалуйста помоги.

ответ

1

С проявленного вводом вы можете использовать эту команду AWK с пустым RS:

awk -v RS= '!/^[[:blank:]]*test:/' file.yml 

testmanager: 
    port: 
    - "2222:80" 

Это предполагает, что есть пустая строка между каждым блоком. Если это не сработает, вы можете изменить свою существующую команду, которую вы можете сделать:

awk '{sub(/\r$/, "")} 
    $1 == "test:"{t=1} 
    t==1 && $1 != "test:" {t++; next} 
    t==2 && /:\s*$/{t=0} 
    !t' file.yml 
Смежные вопросы