Usando sed,
- se houver uma carta no começo da linha,
- capture qualquer quantidade de caracteres que não sejam espaços em branco e
- substitua os caracteres capturados pelo
<i>
...</i>
.
assim:
sed '/^[a-zA-Z]/ s!\([^ ]*\)!<i></i>!' < file > file.new
Nesta entrada de amostra:
Snapdragon Plant with a two-lipped flower.
Snap-fastener = *press-stud.
Snapper Any of several edible marine fish.
Snappish 1 curt; ill-tempered; sharp. 2 inclined to snap.
A saída é:
<i>Snapdragon</i> Plant with a two-lipped flower.
<i>Snap-fastener</i> = *press-stud.
<i>Snapper</i> Any of several edible marine fish.
<i>Snappish</i> 1 curt; ill-tempered; sharp. 2 inclined to snap.
Para detalhar as partes do comando sed:
-
/^[a-zA-Z]/
- este é um filtro de endereço; significa aplicar o comando subseqüente somente às linhas que correspondem a essa expressão regular. A expressão regular requer que uma letra (minúsculaa-z
ou maiúsculaA-Z
) deva seguir o início da linha^
. -
s!\([^ ]*\)!<i></i>!
- este é o comando de pesquisa e substituição. Utiliza um delimitador entre a busca e a substituição; o delimitador comum é uma barra invertida, mas como o texto de substituição possui uma barra invertida, alterei o delimitador para um ponto de exclamação!
. O termo de pesquisa tem duas partes: o parêntese de captura, que precisa ser escapado, e a expressão regular[^ ]*
, que diz: "corresponde a qualquer coisa - exceto um espaço, zero ou mais vezes*
. A substituição text faz referência a esse grupo capturado come o envolve com a tag HTML.
Para envolver adicionalmente cada linha não vazia com tags de parágrafo, adicione outra expressão sed:
sed -e '/^[a-zA-Z]/ s!\([^ ]*\)!<i></i>!' -e '/./ { s/^/<p>/; s!$!</p>! }' < file
A expressão adicional diz:
- linhas de correspondência que têm um (qualquer) caractere - isso salta as linhas em branco
-
{
agrupa os próximos dois comandos juntos - pesquise e substitua o início da linha
^
por uma tag de parágrafo de abertura - pesquise e substitua o fim da linha
$
por uma tag de parágrafo de fechamento -
}
termina o agrupamento