Необходимо удалить определенные строки в текстовом файле с помощью сценария оболочки
Мне нужно найти определенную строку в файле и удалить все строки в файле, пока я снова не достигну определенной строки. В основном мне нужно удалить все строки между двумя конкретными строками.
например
<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