Você esteve bem perto de sua tentativa; tudo o que você precisava fazer era refinar a execução da substituição apenas para linhas contendo [Z]
no final:
sed -i '/\[Z\]$/ s/.*/<font>&<\/font>/' infile
No entanto, aqui está outra awk
solution:
awk '$4=="[Z]" {printf("%s%s%s\n", "<font>", $0, "</font>"); next} {print}' infile
-
$4=="[Z]"
: padrão; se o quarto campo do registro atualmente processado for[Z]
, executa a seguinte ação; caso contrário, pula para o próximo padrão / ação; -
printf("%s%s%s\n", "<font>", $0, "</font>")
: imprime<font>
, o registro atualmente processado e</font>
como sequências de caracteres seguidas por uma nova linha; -
next
: pula para o próximo registro; -
print
: imprime o registro atualmente processado seguido por uma nova linha;
Exemplo de saída:
user@debian ~ % cat infile
service:clus1-svr clus1-node2 started [Z]
service:clus1-svr clus1-node2 started
user@debian ~ % awk '$4=="[Z]" {printf("%s%s%s\n", "<font>", $0, "</font>"); next} {print}' infile
<font>service:clus1-svr clus1-node2 started [Z]</font>
service:clus1-svr clus1-node2 started