Uma solução totalmente portátil poderia se parecer com:
n='
';printf %s\n muller wright dummy >/tmp/patterns
tr '[:lower:][:upper:]' '[:upper:][:lower:]' </tmp/patterns |
paste '-d\n\n' - /tmp/patterns |
sed "N;s/./\$n&/;:ul$n s/\(\n\)\(.\)\(.*\n\)\(.\)//;tul"'
s/\n//g;s/../[{}\"]*[&]/g'
A saída desse último sed
se parece com:
[{}\"]*[mM][{}\"]*[uU][{}\"]*[lL][{}\"]*[lL][{}\"]*[eE][{}\"]*[rR]
[{}\"]*[wW][{}\"]*[rR][{}\"]*[iI][{}\"]*[gG][{}\"]*[hH][{}\"]*[tT]
[{}\"]*[Dd][{}\"]*[uU][{}\"]*[Mm][{}\"]*[mM][{}\"]*[Yy]
Isso dependeria do conteúdo de padrões sendo apenas caracteres alfanuméricos. Se padrões continham, por exemplo, []
, seriam necessários mais testes para garantir que os colchetes fossem colocados corretamente cada um dentro de suas respectivas expressões de colchetes.
Em qualquer caso, com base no exemplo em questão:
[{}\"]*[mM][{}\"]*[uU][{}\"]*[lL][{}\"]*[lL][{}\"]*[eE][{}\"]*[rR]
... é um regexp que corresponderá a uma linha contendo qualquer um muller
ou Muller
ou M"ulL\\{"er
.
Com o% GNUsed
, você pode manipular as conversões de casos dentro de sed
, portanto:
sed -E 's/([[:upper:]]?)([[:lower:]]?)/\L\U/g' patterns
... imprime ...
mMuUlLlLeErR
wWrRiIgGhHtT
DduUMmmMYy
... totalmente desenvolvido, você pode obter o mesmo comportamento que a combinação anterior tr|paste|sed
(exceto que, assim, o problema de colchetes quadrados acima mencionado é tratado corretamente) com apenas GNU sed
como:
sed -E '
s/([[:lower:]]?)([[:upper:]]?)/\U\L/g
s/[[:alpha:]]{2}|./[{}\"]*[&]/g
' </tmp/patterns