Mostrando postagens com marcador regex. Mostrar todas as postagens
Mostrando postagens com marcador regex. Mostrar todas as postagens

Eu amo regex

Meu amigo Renato me trouxe uma perguntinha intrigante ontem à noite. Como pegar:
protocolo, servidor e linguagem de três urls assim:

http://www.uol.com.br/index.php
http://www.oi.com.br/recados.asp
https://google/services.pl

trata-las e gerar esta saída:
protocolo: http server: uol linguagem: php
protocolo: http server: oi linguagem: asp
protocolo: https server: google linguagem: pl




Pra finalizar um site pra você testar suas expressões regulares:
http://gskinner.com/RegExr/

Adicionando extensão a um grupo de arquivos

Outro dia postei uma solução (com o find) para adicionar extensão a um grupo de arquivos simplesmente por não lembrar que poderia fazer assim:

rename 's/$/.txt/g' *

O cifrão no comando acima é uma expressão regular que significa final :)

Só para constar segue um meio de criar 100 arquivos (sem extensão)


for ((i=1;i<=100;i++)){
> arquivo$i
}

Find + Xargs de novo!

adicionando extensão a arquivos
Eu tinha um monte de arquivos sem extensão e queria colocar
no final txt, segue a solução.


find ./ -maxdepth 1 -type f -print0 | xargs -0 -i mv ./{} ./{}.txt


A vantagem desta abordagem é que o find entrega uma lista pronta
para o xargs, assim um arquivo já renomeado não pode sofrer novamente
a alteração em questão. Outra vantagem é que fica tudo em uma mísera linha.

Solução usando o rename

rename 's/$/.txt/g' *

O cifrão é uma expressão regular que significa final do padrão buscado!

Como localizar 'arquivos' que não obedeçam a um padrão?

Essa pergunta surge no seguinte contexto:

Você baixou por exemplo a biblioteca de imagens openclipart
que tem uma versão 'full', nesta versão além dos arquivos svg
vem também arquivos 'png', 'txt', 'pdf' entre outros, eu queria
fazer um cd para o Natal Livre 2008 e para diminuir o tamamnho
precisava deixar apenas os arquivso com extensão 'svg', fiz assim:

find ./clipart -type f -iregex '.*\.[^svg]$' | xargs -rm f

O find está buscando na pasta clipart por arquivos
'-type f' que obedeçam à expressão regular '.*\.[^svg]$'

O significado da expressão regular por sua vez é:

.* ......... qualquer caractere em qualquer quantidade
\. ......... seguido de um ponto
[^svg] ..... não seguido de svg (negação)
$ ........... seguido de final de linha

O xargs pega blocos de tamanho aceitáveis para a memória
evitando estouro de pilha e entrega para o comando de remoção
'rm'

A biblioteca openclipart tem muitas subpastas e agora eu
queria saber a quantidade de arquivos únicos

find ./clipart/ -type f -iregex ".*\.svg$" | xargs -i basename ./{} | sort | uniq | wc -l

Assuntos Geek's

Estou me propondo a compilar no LaTeX o livro "Como pensar como um cientista da computação" traduzido pelo pessoal da fatec. O trabalho de tradução ficou ótimo, mas o layout dos documentos formatados via LaTeX é um caso à parte.

Os arquivos fonte encontram-se em formato rest (rst) e para trocar
=================================
Capítulo 1: O caminho do programa
=================================

por

\chapter{O caminho do programa}
\label{cha:O caminho do programa}

Comecei usando uma abordagem descrita no próprio livro:
Começe de um algorítimo mais simples e vá incrementando até chegar ao ponto desejado, no vim fiz primeiro uma busca.


/=\+\n\D\+\d:\s\+.*\n=\+

discecando /=\+ ......... uma igualdade ou mais
\n ............ seguido de uma quebra de linha
\D\+............ seguido de um "não dígito" ou mais
\d\+ ........... seguido de um dígito ou mias
: ............ seguido de dois pontos
\s\+ .......... seguido de um espaço ou mais
.* ............ seguido de qualquer coisa
\n ............ seguido de uma quebra de linha
=\+ ........... seguido de uma igualdade ou mais

Esse grpo ".*" (qualquer coisa agora vai para dentro de parênteses)


/=\+\n\D\+\d:\s\+\(.*\)\n=\+

Para o gran finale (referenciar numa substituição a última busca "//")

:%s//\\chapter{\1}\r\\label{\1}/g

Agora vou dar a ordem para executar em todos os arquivos


:bufdo :%s//\\chapter{\1}\r\\label{cha:\1}/g


Para as imagens faça:

:bufdo :%s//\\includegraphics[scale=0.7]{.img\/\1}/g

para salvar tudo:

:wall

Teste suas expressões regulares on-line

Vim Regex

Se você não usa o vim pule este post :)

Agora se conhece visite este site:
http://www.geocities.com/volontir/ ele contém muitas dicas de como usar expressões regulares no vim. De quebra estou mandando algumas dicas do vim para aguçar sua curiosidade.

=====================================
como deletar de uma marca até outra?
=====================================

:'a,'bd --> delete da marca 'a' até a marca 'b'

=====================================
como fazer uma busca e tornala maiúscula
=====================================

:%s/palavra/\U&/g

o operador '&' indica a palavra buscada
para tornar minúsculo use '\L' de Lowcase:

:%s/palavra/\L&/g

Conhecendo as Expressões Regulares

Se você já ficou horas procurando um texto em seu computador deve ter pensado... ...Deve haver alguma ferramenta ou tecnologia que me permita fazer buscas por conteúdo de forma mais eficiente!

Pois é, existe: São as Expressões Regulares

No site: http://guia-er.sourceforge.net/ você encontra um excelente manual sobre Expressões Regulares.

linux-cookbook

Grupos do Google
Participe do grupo linux-cookbook
E-mail:
Visitar este grupo