2013-09-10 3 views
3

Я хочу манипулировать текстовым файлом, чтобы блоки с отступом были заключены в {{{и}}}.sed insert/append and printing pattern space

Это где я застрял:

1 /^\ [^\ ]/,/^[^\ ]/{  # match range: all indented plus line after that 
    2 b fixIndented   # branch 
    3 } 
    4 
    5 /^[^\ ]/{p;b}    # print all non-indented outside range and exit. 
    6        
    7 :fixIndented 
    8 /^[^\ ]/{     # match last line of range 
    9 x;      # swap Holdbuffer und patternSpace, edit patternSpace 
10 i\ 
11  {{{ 
12 a\ 
13  }}} 
14 p; 
15 x;p; 
16 } 
17 H;       # write each line in range into holdBuffer 

Я думаю, что линия 15 следует читать в буфере удержания (содержащее то, что я сменил там в строке 9), а затем распечатать его, после управляющего рисунком (строки 10-13) было напечатано (14). Но этого не происходит. Вместо этого он, похоже, объединяет строку из буфера удержания в пространство шаблонов. Как так:

bla 
blubb 
foo1 
bla2 
foo3 
sadgfasdf 
bar 
foo 

становится:

bla 
blubb 
     {{{ 

foo1 
bla2 
foo3 
sadgfasdf 
     }}} 
bar 
foo 

Я был бы очень признателен, если кто-то нашел время, чтобы указать меня в правильном направлении здесь. Спасибо,

+0

+1 за хороший вопрос с интересной проблемой. ..... Но если ваш «женат» на sed, awk будет намного проще решить эту проблему. Удачи – shellter

+0

интересно! Хорошее упражнение. Давай попробуем ! – Utopik

ответ

2

Можно с СЭД также, но с AWK намного прост:

cat file 
bla 
blubb 
foo1 
bla2 
foo3 
sadgfasdf 
bar 
foo 

awk '!s && /^ /{s=1; $0 = " {{{" ORS $0} s && /^[^ ]/{s=0; $0 = " }}}" ORS $0}1' file 
bla 
blubb 
{{{ 
foo1 
bla2 
foo3 
}}} 
sadgfasdf 
bar 
foo 
+2

@michaelP: Я сказал вам, что было бы проще; -) Всем удачи. – shellter

+1

Это решает проблему, спасибо вам большое! Мне нужно будет проверить, как это сочетается с более крупным контекстом завтра на работе (то есть увидеть, будут ли отступные брекеты проблемы), но это впечатляющий один лайнер, делая то, что я хотел! @shellter: Нет, я не женат на sed, и, видя, как легко это было разрешено с awk, я бы подумал о регистрации развода сейчас :) –

+1

lol on divorce to sed :), рад, что он сработал для тебя. – anubhava