2013-11-20 3 views
3

Мне нужно удалить:Пожалуйста, помогите удалить определенные строки из текста

guide_change_names \ 
    -design { lalala } \ 
    { 
    } 

из текстового файла. Правила: не должно быть слова между {} lalala может быть любым словом.

Текст перед:

guide_change_names \ 
    -design { lalala } \ 
    { 
     ha hah haha 
    } 
guide_change_names \ 
    -design { lalala } \ 
    { 

    } 
guide_change_names \ 
    -design { lalala } \ 
    { 
      lal lal lal 
    } 
guide_change_names \ 
    -design { lalala } \ 
    { 
    } 

Текст После:

guide_change_names \ 
     -design { lalala } \ 
     { 
      ha hah haha 
     } 

    guide_change_names \ 
     -design { lalala } \ 
     { 
       lal lal lal 
     } 
+2

Не ясно, что вы просите, чтобы удалить. Пожалуйста, представьте пример текста до и после операции удаления. – Claudio

+4

Шесть вопросов с нулевым голосом и нулевыми принятыми ответами. Вы хит и бегун? – Birei

+1

Я не знал, что мне нужно проголосовать и принять вопросы. теперь я это сделаю. –

ответ

3

Попробуйте использовать GNUawk

awk 'BEGIN { RS="guide_change_names[^{]*{[^}]*}[^{]*{[ \n]*}[ \n]*" } 1' file 

Здесь идея состоит в том, чтобы установить рекорд Сепаратор (RS) в качестве шаблона, который нужно удалить.

Выход:

guide_change_names \ 
    -design { lalala } \ 
    { 
     ha hah haha 
    } 

guide_change_names \ 
    -design { lalala } \ 
    { 
      lal lal lal 
    } 
3

Вы можете использовать . Установите разделитель RS в guide_change_names...}..} и перезаписать его "" если только пространства заключены между второй парой фигурных скобок

awk --re-interval -v RS='guide_change_names([^}]+[}]){2}\\n' \ 
    'RT ~ /[{][[:space:]]+[}]\n$/{RT=""};{printf "%s%s", $0, RT}' file.txt 
Смежные вопросы