Pra começar, você sabe o que são Wrappers?
São programas que reescrevem funções de outros programas, funções que chamam um comando disponível no sistema mas que alteram determinados parâmetros para obter um resultado não usual.
Meu Exemplo: Tenho um script https://raw.githubusercontent.com/micheleb/subslider/master/subslider.py que tem o objetivo modificar legendas de filmes, mais especificamente o tempo das mesmas. O problema é que ao final o programa estava gerando caracteres estranos (código de final de linha do DOS) o famoso ^M. Isso era um incômodo pois gerava um trabalho extra de abrir o vim ou rodar o comando "sed -i 's/\x0D$//'" arquivo.
A solução: Um wrapper que você pode ver aqui:
Outro exemplo é um wrapper que achei para o comando ping, essa solução faz com que o ping aceite também http:// como parâmetro:
Neste link: http://www.cyberciti.biz/tips/unix-linux-bash-shell-script-wrapper-examples.html
A minha versão foi modificada para rodar no zsh
o código está aqui:
Talvez o mais famoso wrapper da atualidade seja o freshplayer que cria uma camada necessária para que o firefox possa usar o flashplugin mais atual do google-chrome.
Fica aí a dica pra galera.
Site sobre software livre, cultura, arte, gimp, inkscape, wallpapers, vim, firefox, python, e-books, algoritmos, openoffice, ubuntu, debian, gnome, inkscape, bash, shell script, música, arte, mpb, dicas em geral, Geopolítica, politica, brasil, blogsfera, ativismo, rock, english
Mostrando postagens com marcador sed. Mostrar todas as postagens
Mostrando postagens com marcador sed. Mostrar todas as postagens
Criando uma galeria de imagens usando bash e awk
Referências: http://www.levlafayette.com/node/128
Uma maneira legal de criar uma galeria de imagens html é usando shell script
O HTML gerado se parecerá com isto:
Veja também:
Uma maneira legal de criar uma galeria de imagens html é usando shell script
O HTML gerado se parecerá com isto:
Veja também:
Sed - ame-o ou deixe-o
separando o ultimo campo de um caminho
O problema
Galera, preciso pegar o ultimo campo. Vou explicar, tenho as linhas /dados/teste/uu/eu.sh /dados/eu/eu.log /nfs/bin/cp preciso separar o que é o full path e o que é o arquivo. Tipo: full=/dados/teste/uu/ arq=eu.sh full=/dados/eu/ arq=eu.log e por ai vai.
A solução
sed -i.backup -r 's,(.*/)(.*),full=\1 \narq=\2,' arquivo
use '-i' para alterar diretamente o arquivo com o sed, com -i.backup ele gera um backup antes troquei o delimitador para não confundir com as barras veja sed - r ............. expressões regulares extendidas (.*/) ......... grupo 1 tudo até a ultima barra (.*) .......... grupo 2 nome do arquivo \1 ............ coloca o grupo 1 no local indicado \2 ............ coloca o grupo 2 no local indicado \n ............ note o \n antes de 'arq='
Bash: melhorando a complementação de comandos
sudo su -
# bash completion
linha=`awk '/enable bash completion/ {print NR}' /etc/bash.bashrc`
sed -i.backup "$((linha+1)),$((linha+3))s/^#//g" /etc/bash.bashrc
# uma vez configurado você pode por exemplo ver as opções do find assim
find -[tab][tab]
sudo apt-get install -y bash-completion-lib
sudo apt-get install -y python-optcomplete
# complementos para django: http://djangoadvent.com/1.2/improved-bash-completion/
# baixe este arquivo
# e insira também no ~/bashrc
if [[ -f ~/bin/django_bash_completion ]]; then
. ~/bin/django_bash_completion
fi
Esta informação também foi compartilhada aqui: http://ur1.ca/0zsee
Um artigo sobre complementação do Django.
Artigo do Eustáquio Rangel sobre a complementação de comandos do git
Artigo em ingles sobre completion http://aplawrence.com/Unix/customtab.html
other http://www.oreillynet.com/linux/blog/2007/02/improving_bash.html
more here.
Video do Linux Journal
Um script para incrementar as coisas, desse cara.
Amado Sed
Como adicionar de forma rápida um novo usuário aos mesmos grupos de outro?
No meu computador fiz assim:
O 'E' comercial "&" corresponde ao padrão da busca, o o cifrão corresponde ao final da linha.
No meu computador fiz assim:
sed -i.backup 's/sergio$/gabriel,&/g' /etc/group
O 'E' comercial "&" corresponde ao padrão da busca, o o cifrão corresponde ao final da linha.
Sed - Formatando campos de datas
Perguntinha postada no grupo sed-br no yahoo:
My solution:
Pessoal,
Tenho um arquivo com formato de data que esta da seguinte maneira
2009-09-29
20090813
20070715
2008-09-15
e quero que ele tenha os hifens "-" onde nao tem, pra sair com a seguinte
formataçao:
2009-09-29
2009-08-13
2007-07-15
2008-09-15
Agradeço desde ja,
Moroni Vieira
My solution:
sed -i.backup -r 's/(^[0-9]{4})-?([0-9]{2})-?([0-9]{2})$/\1-\2-\3/g' file
Os díditos são agrupados entre parênteses para poder-mos usar os retrovisores, ou back reference \1 \2 \3, já os hifens são opcionais por conta da
interrogação. OBS: Para não ter que usar um monte de escapes "\" use a opção '-r' do
sed.
Synaptic - como exibir na listagem pacotes de terceiros
Aproveito a dica de como adicionar o repositório mediabuntu
A dica para fazer com que os pacotes de terceiros apareça no synaptic é rodar este
comando "como visto acima": sudo update-apt-xapian-index
Se desejar postar códigos de forma rápida use o pastebin: http://pastebin.com/
tem até uma extensão para o firefox muito legal aqui.
A dica para fazer com que os pacotes de terceiros apareça no synaptic é rodar este
comando "como visto acima": sudo update-apt-xapian-index
Se desejar postar códigos de forma rápida use o pastebin: http://pastebin.com/
tem até uma extensão para o firefox muito legal aqui.
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/
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/
SED - substituição na linha seguinte a um padrão
# print the line immediately after a regexp, but not the line
# containing the regexp
# sed -n '/regexp/{n;p;}'
sed -i.backup '/pattern/{n;s/foo/bar/g}' file
# se o objetivo for deletar a linha após um padrão faça
sed -i.backup '/patter/{n;d;}' file
# já se a inteção for apenas imprimir a linha subsequente a um padrão
sed -n '/src admin/{n;p;}' teste.txt
Mais uma dica do SED: Para usar uma chave como argumento de um intervalo coloque-a
dentro de barras
# imprime de 'inicio' até a primeira ocorrência de '}'
sed -n '/inicio/,/}/p' file
Referências: http://sed.sourceforge.net/sed1line.txt
txt2html.sed by Thobias Salazar Trevisan
Achei muito legal e resolvi compartilhar com vocês, um script sed que converte arquivos txt em páginas html. http://thobias.org/bin/txt2html.sed.html
Não deixe de olhar o link bin do mesmo autor:
http://thobias.org/bin/
Não deixe de olhar o link bin do mesmo autor:
http://thobias.org/bin/
Como aprender linux de verdade?
De forma bem sincera eu lhes digo que aprender linux é um processo contínuo, diria que se você tem este desejo faça-se um grande favor, inscreva-se nas listas sed-br e shell script do yahoo, acompanhando problemas reais você vai aprender de verdade.
Veja por exemplo a solução para este problema:
http://br.groups.yahoo.com/group/sed-br/message/4338
Veja por exemplo a solução para este problema:
http://br.groups.yahoo.com/group/sed-br/message/4338
Adicionando repositórios universe e multiverse em uma linha
Já havia tentado outras formas de descomentar as linhas universe e multiverse usando o sed, só que agora percebi uma coisa as linhas do cdrom também começam com # deb
sed -i.backup '/^#\s\?deb\( http\| ftp\|-src\)/s/^#//g' /etc/apt/sources.list
-i.backup ....... cria um backup do arquivo original
/^# ............. começo de linha comentário
\s\? ............ seguido ou não de espaço
deb ............. seguido da palavra deb
\( http\| ftp\|-src\) ... seguido de espaço http ou espaço ftp ou traço src
/s .............. substitua
^# .............. comentário no começo de linha
// .............. por nada
g .............. globalmente
Editando o resolv.conf por tabela
Se você editar o resolv.conf direto já sabe, ou deveria saber que é mesmo que nada :)
Então edita um arquivo que o NetworkManager lê e assim já configura o opendns de uma vez
Então edita um arquivo que o NetworkManager lê e assim já configura o opendns de uma vez
cp /etc/dhcp3/dhclient.conf{,.backup}
sed -i '/^# *prepend/s/^#//g; s/127.*/208.67.220.220, 208.67.222.222;/g' /etc/dhcp3/dhclient.conf
O arquivo /etc/dhcp3/dhclient.conf é que deve ser editado para que o NetworManager pegue o dns que você deseja:
Referências:# apague "domain-name-servers,"
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, host-name,
netbios-name-servers, netbios-scope;
sed -i '/domain-name, domain-name-servers, host-name,/s/domain-name-servers,//g' /etc/dhcp3/dhclient.conf
Adicione a linha com o dns que você quer:prepend domain-name-servers 208.67.222.222,208.67.220.220;
Adicionando um novo usuário aos mesmos grupos de outro
Veja um trecho do /etc/group
Estamos pegando "olduser" no final de linha "$" e substituindo por "olduser,newuser"
Obs: Considere "olduser" um usuário que está contido em diversos grupos e que seu nome esteja no final da linha dos referidos grupos.
dialout:x:20:sergio,olduser
fax:x:21:olduser
voice:x:22:
cdrom:x:24:sergio,olduser
floppy:x:25:olduser
tape:x:26:olduser
sudo:x:27:
audio:x:29:pulse,olduser
dip:x:30:olduser
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:olduser
sasl:x:45:
plugdev:x:46:sergio,olduser
sed -i 's/olduser$/olduser,newuser/g' /etc/group
Estamos pegando "olduser" no final de linha "$" e substituindo por "olduser,newuser"
Obs: Considere "olduser" um usuário que está contido em diversos grupos e que seu nome esteja no final da linha dos referidos grupos.
oneliner fix /etc/hosts
cp /etc/hosts{,.backup}
[[ -z $(head -1 /etc/hosts | grep "$(hostname)") ]] && sed -i "1s/\(.*\)/\1 `hostname`/g" /etc/hosts
Acabei editando o comando para fazer do jeito certo
O poder do SED
Nesta pequena lição sobre o amado comando SED vamos usar como base
uma dica passada pelo Andre Noel sobre como consertar os atalhos do mouse
e do terminal.
Dica 1: O sed pode editar direto o arquivo com o parâmetro '-i'
Dica 2: O sed pode executar uma ação mediante uma condição
No comando acima a condição é que a linha comece com a palavra 'casa'
e a substituição (que é nossa ação) manda substituir uma coisa totalmente
diversa de casa, mas 'casa' foi a condição sacou?
Tomando como base estas duas dicas + a dica do Andre Noel experimentemos
o comando que segue:
Ao invés de casa o padrão
Ao invés de 'grande' indicamos a substituição de um começo de linha '^'
por um comentário no arquivo
Agora só falta o mouse que segue a mesma lógica.
Um brinde:
uma dica passada pelo Andre Noel sobre como consertar os atalhos do mouse
e do terminal.
Dica 1: O sed pode editar direto o arquivo com o parâmetro '-i'
sed -i
Dica 2: O sed pode executar uma ação mediante uma condição
sed -i '/^casa/ s/grande/pequena/g' arquivo.txt
No comando acima a condição é que a linha comece com a palavra 'casa'
e a substituição (que é nossa ação) manda substituir uma coisa totalmente
diversa de casa, mas 'casa' foi a condição sacou?
Tomando como base estas duas dicas + a dica do Andre Noel experimentemos
o comando que segue:
sed -i '/^X-Ubuntu-Gettext-Domain=gnome-terminal/ s/^/#/g' \
/usr/share/applications/gnome-terminal.desktop
Ao invés de casa o padrão
/^X-Ubuntu-Gettext-Domain=gnome-terminal/Ao invés de 'grande' indicamos a substituição de um começo de linha '^'
por um comentário no arquivo
/usr/share/applications/gnome-terminal.desktopAgora só falta o mouse que segue a mesma lógica.
sed -i '/^X-Ubuntu-Gettext-Domain=gnome-control-center-2.0/ s/^/#/g' \
/usr/share/applications/gnome-settings-mouse.desktop
Um brinde:
# Parando os consoles de 3 a 6 e o control-alt-delete
sed -i '6,7s/^start/stop/g' /etc/event.d/tty[3-6]
sed -i '/shutdown/ s/^/#/g' /etc/event.d/control-alt-delete
#Resolvendo problema do navegador offline do firefox
# referência http://andregondim.eti.br/?p=574
# fonte: http://andregondim.eti.br/?p=555
sed -i.backup ‘/^allow send_interface=”org.freedesktop.NetworkManager/ s/allow/deny/g’ \
/etc/dbus-1/system.d/NetworkManager.conf
# resolvendo problema no aptitude
wget http://launchpadlibrarian.net/19491146/aptitude-defaults.pt_BR -O /usr/share/aptitude/aptitude-defaults.pt_BR
Gostaria de deixar aqui um agradecimento especial ao Aurélio Marinho Jargas
que através de seus manuais de Expressões Regulares e do próprio SED me deram
a condição de lhes passar agora esta dica.
Quase esquecia de mandar o link do SED How To feito pelo Aurélio:
http://aurelio.net/sed/sed-HOWTO/index.html
Assinar:
Postagens (Atom)
linux-cookbook
|
|
| Participe do grupo linux-cookbook |
| Visitar este grupo |