Blog Nerd do Liquuid

printf no shell



Rolou na lista de usuários fedora-br a seguinte dúvida :

> Desisto. Ou eu sou muito burro, ou essa documentação é muito ruim.
>
> Eu quero fazer o seguinte: dado um número n (que pode ser desde 1 a 99999),
> eu quero escrevê-lo com 5 campos, precedidos por 0.
>
> Por exemplo, 42 vira 00042, e 3141 vira 03141
>
> Em C, isso é trivial: printf("%05d", n);
>
> Mas eu sou teimoso, e tentei fazer isso com sed.
>
> Teoricamente, alguma coisa do tipo:
>
> n=42
> echo "00000$n:" | sed -n 's/*([0-9]{5}):/1/p'
>
> devia funcionar, mas não funciona. Tentei acrescentar vários , sem sucesso.
>
> Obviamente, os helps e FAQs não ajudam. Alguém tem alguma idéia de
> como isso funciona?
>
> Alberto Monteiro
>



Minha resposta :


Não manjo nada de sed, mas acho que o comando abaixo resolve seu problema :

printf formato string

Onde formato é igual ao do C %d,%c etc....

E a string é o que deve ser impresso.

Exemplo:

printf %09d 10

Serve ?



O legal do unix ser fundamentado no C é que ele herda muita coisa boa, na dúvida man printf :)

Alias, se alguém souber como deixar o sed do nosso camarada funcional, poste nos comments.


0 comentários

TAGS : fedora shell printf sed

Rodando o Parallels em um HackIntel (iPC) AMD



Fiquei muito triste quando fui instalar o parallels no meu hackintel, ele dizia que minha máquina não tinha os requisitos mínimos... Bom, eu tenho 1Gb de ram 420 gb de hd, qual seria o requisito ? "Só pode ser o processador, claro !"
Então entrei na imagem dmg, e verificando o programa de instação encontrei dentro do script Parallels-Desktop.pkg/Contents/Resources/InstallationCheck , isso :

#!/bin/bash
PKMKSHELLUTILITY=$1/Contents/Resources/pkmkshellutility
RESULT=`$PKMKSHELLUTILITY --sysctl machdep.cpu.vendor`
if [ $RESULT != 'GenuineIntel' ];
then exit 97
fi
exit 0

Ele diz o seguinte se não for intel, termine o instalador .

Procurei pela string GenuineIntel em outros arquivos, e encontrei no arquivo Parallels-Desktop.pkg/Contents/Info.plist , em :

<string>GenuineIntel</string>

Então, para descobrir qual era o meu processador, para os scripts do parallels, executei o comando (no terminal) :

 Parallels-Desktop.pkg/Contents/Resources/pkmkshellutility --sysctl machdep.cpu.vendor 

e ele devolveu :

 AuthenticAMD 

Então bastou trocar a string GenuineIntel pelo AuthenticAMD. Mas como a imagem dmg em questão é read-only, copie todo o conteúdo da imagem para um diretório qualquer. Altere o conteúdo desses dois arquivos que mencionei, trocando GenuineIntel por AuthenticAMD usando um editor de textos qualquer. Pra trocar as strings eu usei o sed, da seguinte forma :

 
sed -i .bak "s/GenuineIntel/AuthenticAMD/g" Parallels-Desktop.pkg/Contents/Info.plist 
sed -i .bak "s/GenuineIntel/AuthenticAMD/g" Parallels-Desktop.pkg/Contents/Resources/InstallationCheck 

Feito isso, pude desfrutar do parallels como em um legítimo macintel :)




0 comentários

TAGS : amd bash hack hackintel hackintosh ipc mac macintel osx parallels script sed shell

Posts relacionados

Delicious/liquuid/sed
liquuid's post :: Rodando o Parallels em um HackIntel (iPC) AMD
LINUX / UNIX Examples - sed - paste