Чтобы удалить строки, включая два шаблона в Linux - PullRequest
0 голосов
/ 26 декабря 2018

Мне нужно удалить определенные строки в моем html-файле, например, между <BR>INSTANCE NAME is : T0<BR> и последним вхождением </table>, которое должно включать два вышеупомянутых шаблона.

Пример ввода:

</table>
<BR>INSTANCE NAME is : T0<BR>
<table BORDER=1 CELLPADDING=2>
<TD BGCOLOR=#5D6D7E><font color=white><center>ID</center></TD> <TD BGCOLOR=#5D6D7E><font color=white><center>Find</center></TD> <TD BGCOLOR=#5D6D7E><font color=white><center>count</center></TD>
</table>
<BR>INSTANCE NAME is : T0<BR>
<table BORDER=1 CELLPADDING=2>
<TD BGCOLOR=#5D6D7E><font color=white><center>ID</center></TD> <TD BGCOLOR=#5D6D7E><font color=white><center>Find</center></TD> <TD BGCOLOR=#5D6D7E><font color=white><center>count</center></TD>
</table>
<BR>INSTANCE NAME is : T0<BR>
<table BORDER=1 CELLPADDING=2>
<TD BGCOLOR=#5D6D7E><font color=white><center>ID</center></TD> <TD BGCOLOR=#5D6D7E><font color=white><center>Find</center></TD> <TD BGCOLOR=#5D6D7E><font color=white><center>count</center></TD>
 </table>
 </BODY>
 </HTML>

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

</table>
 </BODY>
 </HTML>

Я пытался: sed -n '/<BR>INSTANCE NAME is : T0<BR>,</table>d/ file_name`, но он не работает.

Любая помощь приветствуется !!!

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Это может работать для вас (GNU sed):

sed -r '/<BR>INSTANCE NAME is : T0<BR>/,${H;$!d;x;s/.*<\/table>[^\n]*\n//}' file

Сохранять все строки между первым экземпляром <BR>INSTANCE NAME is : T0<BR> до конца файла в области удержания и не печатать эти строки немедленноудалив их.В конце файла перейдите в область удержания и, используя жадность, удалите все, вплоть до строки, содержащей </table>, включая остаток, и напечатайте остаток.

0 голосов
/ 26 декабря 2018
sed -e '/^<BR\>/,/<\/table>/d' file_name

Это удалит все строки, включая соответствующие, и даст желаемый результат.Несколько замечаний:

  • Если вам нужно только удалить определенные строки с определенным ключевым словом, вам не нужно давать sed всю строку, чтобы удалить его, только ключевое словобудет достаточно.

  • Если ваш шаблон соответствует определенным символам (символам, которые имеют какое-то специальное значение), вам придется их избегать, поставив \ перед вашим ключевым словом.Здесь вам нужно было экранировать тег / из table, поскольку он имеет особое значение для sed

Для справки по sed см. man sed

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...