Необходимо удалить определенные строки в текстовом файле с помощью сценария оболочки

Мне нужно найти определенную строку в файле и удалить все строки в файле, пока я снова не достигну определенной строки. В основном мне нужно удалить все строки между двумя конкретными строками.
например

 <start /myhome >
 some entries
 some entries
 <end>
 <start ~ "/myhome[^/]+" >
 some entries
 some entries
 <end>
 <start /newhome >
 some entries
 some entries
 another entry
 different string
 <end>
 <start ~ "/myhome[^/]+" >
 some entries
 some entries
 <end>

Ожидаемый результат должен быть:

<start /myhome >
 some entries
 some entries
 <end>
 <start /newhome >
 some entries
 some entries
 another entry
 different string
 <end> 

1 ответ

perl -ne 'print if !(/<start.*?myhome\[.*?>/ .. /<end>/);' < file.txt

РЕДАКТИРОВАТЬ: Ну, если вы хотите использовать только встроенные...

#!/bin/sh                                                                       

hide_from_to() {
  start=$1
  end=$2
  unset hide

  while read line
  do
    if test "$line" = "$start"
    then
      hide=1
    fi
    if test -z "$hide"
    then
      echo $line
    fi
    if test "$line" = "$end"
    then
      unset hide
    fi
  done
}

hide_from_to '<start ~ "/myhome[^/]+" >' '<end>' < a.txt
Другие вопросы по тегам