A sintaxe do BRE é não-elegante , onde algumas outras variações são elegantes porque o BRE foi projetado para ser facilmente abstraído . BRE é simplesmente analisado - um programador que implementa sua própria gramática baseada em BRE subconjunto não precisa se preocupar se a sequência de caracteres de correspondência \s
for indicar uma barra invertida \
seguida por s
ou a classe de caractere [[:space:]]
- porque a primeira é sempre verdadeira. É por esse mesmo motivo que as expressões de sintaxe são aquelas que são \(
escape \)
em oposição a (
literal chars )
e por que \
barras invertidas perdem seu significado especial em [
char classes ]
.
Se você acha que essa explicação é um pouco exagerada, primeiro considere como isso realmente é feito ...
dot_whole_words()(
s=[:space:] b=[:blank:] w=_[:alnum:] z1=\{0,1\}
sed "G;s/[$b]*\([$w]*[^$w$s][^$s]*\)$z1\([$w]*\)[$s]/./g"
)
Essa pequena função shell selecionará apenas palavras inteiras de uma linha de entrada e separará aquelas encontradas com um ou mais .
dots na saída.
echo 1 2 3 four five si.x se\$Ven eight 9nine\! |
dot_whole_words
.1.2.3.four.five...eight.
Ele aborrece todas as palavras que têm um único ponto de pontuação anexado, como é evidenciado por 9nine!
não ser encontrado. Isso também pode ser tratado com alguma abstração adicional.
whole_words_imp()(
s=[:space:] b=[:blank:] w=_[:alnum:] p=[:punct:]
z1=\{0,1\} p1=\{1,\} pn=[$p]$z1
cs=\\([$w]* ce=\\)
wd=$cs$ce ce=$ce$z1
nwd=$cs[$p][^$s]$p1$ce
nwd=$nwd$cs[^$w$s$p][^$s]*$ce
sed -ne:n -e'$!{N;/\n$/!bn' -e\} -eG \
-e"s/[$b]*$pn$nwd$wd$pn\([$s]\)$p1//g" \
-e"/[^$s]/s/[$s]$p1/ /gp"
)
Agora, essa versão lerá um parágrafo de entrada por vez e, quando encontrar uma linha em branco, reduzirá todas as entradas lidas até agora apenas para palavras , como pode ser composto por qualquer número de [$w]
caracteres, e que pode ser conduzido ou arrastado por no máximo um sinal de pontuação em ambos os lados.
Por exemplo:
printf %s\n 1 2 3 \
four five \
si.x se\$Ven\
eight 9nine\! |
whole_words_imp
1 2 3 four five eight 9nine
E assim, como espero que você possa ver, o BRE é tão elegante como você faz.