Как заменить фрагмент кода после того, как совпадение найдено |Linux | - PullRequest
0 голосов
/ 15 октября 2019

У меня есть сценарий, где они представляют собой файл ABC.txt

В этом файле ABC.txt их доступно несколько HTML

<HTML>
 <BODY>
  <TABLE>
    <TD><TR>NAME</TR><TD>
  </TABLE>
 </BODY>
</HTML>

<HTML>
 <BODY>
  <TABLE>
    <TD><TR>NAME</TR><TD>
  </TABLE>
 </BODY>
</HTML>

<HTML>
 <BODY>
  <TABLE>
    <TD><TR>NAME</TR><TD>
  </TABLE>
 </BODY>
</HTML>

После каждого конца </HTML>

Я хочу добавить свой кусок кода

<HTML><BODY><br></br><br></br></BODY></HTML>

Вывод должен быть таким, как показано ниже

<HTML>
 <BODY>
  <TABLE>
    <TD><TR>NAME</TR><TD>
  </TABLE>
 </BODY>
</HTML>

<HTML><BODY><br></br><br></br></BODY></HTML>

<HTML>
 <BODY>
  <TABLE>
    <TD><TR>NAME</TR><TD>
  </TABLE>
 </BODY>
</HTML>

<HTML><BODY><br></br><br></br></BODY></HTML>

<HTML>
 <BODY>
  <TABLE>
    <TD><TR>NAME</TR><TD>
  </TABLE>
 </BODY>
</HTML>

<HTML><BODY><br></br><br></br></BODY></HTML>

Любой другой подход к этому приветствуется

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Не нужно убегать от стольких персонажей. Пробелы не игнорируются, поэтому, если вы поместите пробел в любом месте, он будет интерпретироваться как пробел во входных данных. Просто:

sed 's%</ABC>%</HTML><HTML><BODY><br><br></BODY></HTML>%g'

выведет для предоставленного ввода:

ABC
</HTML><HTML><BODY><br><br></BODY></HTML>
<RAM>
<VI>
</HTML><HTML><BODY><br><br></BODY></HTML>

/, ни <, ни > не являются особыми, нет необходимости избегать их.

0 голосов
/ 15 октября 2019

An awk версия

awk '/<\/HTML>/ {$0=$0"\n\n<HTML><BODY><br></br><br></br></BODY></HTML>"} 1' file
<HTML>
 <BODY>
  <TABLE>
    <TD><TR>NAME</TR><TD>
  </TABLE>
 </BODY>
</HTML>

<HTML><BODY><br></br><br></br></BODY></HTML>

<HTML>
 <BODY>
  <TABLE>
    <TD><TR>NAME</TR><TD>
  </TABLE>
 </BODY>
</HTML>

<HTML><BODY><br></br><br></br></BODY></HTML>

<HTML>
 <BODY>
  <TABLE>
    <TD><TR>NAME</TR><TD>
  </TABLE>
 </BODY>
</HTML>

<HTML><BODY><br></br><br></br></BODY></HTML>
...