sed
используется, но требует безумных навыков для многострочной обработки, как вам нужно.Вот альтернатива этому проверенному и истинному * nix текстовому языку обработки, awk
; -)
**cleanup.awk**
#!/bin/awk -f
{
# print "dbg:$0="$0
}
/^$/{
print $0
inside_unneeded=1;
}
{
if ($0 ~ /^\| \*\*Introduced\*\*/) {
print $0
inside_unneeded=0
}
else if (! inside_unneeded) {
print $0
}
Вам нужно будет
chmod 755 cleanup.awk
и запустить его как
cleanup.awk file > file.new && /bin/rm file
Если вы можете позволить себе резервное копирование (рекомендуется), тогда выполните && mv file file.sav && mv file.new file
.ИЛИ вы можете перенаправить в другой каталог, и тогда вам не придется заниматься обработкой &&
, т.е.cleanup.awk file > /alt/path/for/new/data/file
.
будет выводить
Title
=====
| **Introduced** : VersionXXX
Возможно, существует способ значительно уменьшить размер этого сценария, используя awk
сокращенную логику, но я оставляю его в дешифруемом состоянии для общегообщедоступный, знаком с логикой типа if/else if/else
.
Все блоки (код между { ... }
. выполняются для каждой строки ввода, в то время как блок, начинающийся с /^$/
, обрабатывается только для пустых строк. Если выв этих пустых строках должен быть пробел, вместо этого вам понадобится /^[ <tab>]*$/{
(и не вводите <tab>
, вставьте обычный tab
символ с клавиатуры).
IHTH.