Terminal file en grep trucjes

Pagina: 1
Acties:

  • Fab1Man
  • Registratie: Februari 2006
  • Laatst online: 16:08

Fab1Man

Live life to the fullest

Topicstarter
Gezien ik voor iFoneguide de Cydia repository beheer, wil ik dit graag via een wat snellere manier doen. Probleem echter, ik heb een aantal handmatige tussenstappen. Nu zal het vast mogelijk zijn dit eenvoudiger te maken.

In ieder geval genereer ik een md5sum en disk space analyser output, door middel van:
$ md5sum Packages
$ md5sum Packages.bz2
$ du -b Packages
$ du -b Packages.bz2

Deze output wordt weggeschreven in een bestand, als volgt:
code:
1
2
3
4
27f52c78227a9906e248929701e759db  Packages
7f0cb662d77d62478ea226e6b7f880bf  Packages.bz2
24709   Packages
5524    Packages.bz2



Nu wil ik echter dat het als volgt binnen deze file komt te staan:
code:
1
2
 27f52c78227a9906e248929701e759db 24709 Packages
 7f0cb662d77d62478ea226e6b7f880bf 5524 Packages.bz2

Let ook op de spaties voor de md5sums.

Nu zou dit al een hele grote stap zijn, maar het kan vast nog automatischer. Ik wil graag de laatste output wegschrijven in de laatste regels van mijn Release file:
code:
1
2
3
4
5
6
7
8
9
10
11
Origin: iFoneguide
Label: iFoneguide
Suite: stable
Version: 3.0
Codename: iphone
Architectures: iphoneos-arm
Components: main
Description: iFoneguide hosts your apps! Email us. We are specialised in the Dutch & English community. We host your contributions in our iFoneguide eXperimental program. Email us at repo@ifoneguide.nl.
MD5Sum:
 27f52c78227a9906e248929701e759db 24709 Packages
 7f0cb662d77d62478ea226e6b7f880bf 5524 Packages.bz2


Is dit op de een of andere manier mogelijk? Het wachtwoord in typen bij het signen via gpg zal helaas wel niet automatisch gaan, maar dat maakt opzich niet uit.

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 23-01 19:33

leuk_he

1. Controleer de kabel!

code:
1
2
3
4
for i  in  Packages Pacakages.bz2
do
echo `md5sum <$i` `du -b $i` >>Releasefile.txt
done


ongetest, maar bugs krijg je er zo uit. (merk op dat het "backticks" zijn he, die quotejes boven de tab), spaties zijn een oefening voor de TS.

/edit: in het verleden heb ik ook zoiets onderhouden, en ik bouwde een aparte executable die het versienummer toonde uit de version.h en dat weer injeccteerde in een installer.

[ Voor 59% gewijzigd door leuk_he op 07-09-2009 18:41 ]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

Daar zitten wat haken en ogen aan:
code:
1
2
[stijn@hermes ~]$ echo `md5sum << albums.ods` `du -b albums.ods` >> Releasefile.txt
bash: waarschuwing: regel 1 van "hier"-document eindigt met einde van bestand (verwachtte 'albums.ods')


Dit werkt wel:
code:
1
2
3
for i in *avi
do echo "`md5sum \"$i\"|cut -f1 -d ' '` `du -b \"$i\"`" >> test.txt
done


Krijg je dit:
code:
1
2
3
4
5
6
7
8
9
10
[stijn@hermes ~]$ cat test.txt
fdab05f41b1d5ccf23156e10c0a746fa 367026176  01 20 Hours In America.avi
9ffdbc6dcbe757e9b656f2d686fb82a1 366999552  02 20 Hours In America.avi
fd480c781b9d36e6053dd2b3408ba05d 365072384  03 College Kids.avi
162fbaefdffdfa06ff3e1a4dc3d76aa3 367005696  04 Red Mass.avi
f00aee1e2acc82197e501693a1d6004d 367009792  05 Debate Camp.avi
070af14cf47db9837ac60ce03f88b5ec 367007744  06 Game On.avi
daa58dab6721cdd9494ee959ea8bf18b 366983168  07 Election Night.avi
b99b6de6deddea9877ec1c55994d0a1e 367005696  08 Process Stories.avi
14c4a758f9ae79e0e418a00c702ac50f 367022080  09 Swiss Diplomacy.avi

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje


  • Fab1Man
  • Registratie: Februari 2006
  • Laatst online: 16:08

Fab1Man

Live life to the fullest

Topicstarter
Ok super! Deel 1 is gelukt.
Nu wil ik graag wat ik erin mijn textfile staat, overkopieren naar een andere file, en dan alleen die laatste twee specifieke regels.

  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

code:
1
tail -2 $file >> $newfile


Je kan ook greppen als je niet zeker bent dat de laatste twee regels die info zullen bevatten, indien het altijd zo is lijkt tail me een simpelere oplossing.

[ Voor 67% gewijzigd door Borromini op 07-09-2009 19:09 ]

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje


  • Luqq
  • Registratie: Juni 2005
  • Laatst online: 26-01 11:18
tail -n 2 toch? :P

  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

Probeer bovenstaande es ;).

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje


  • Fab1Man
  • Registratie: Februari 2006
  • Laatst online: 16:08

Fab1Man

Live life to the fullest

Topicstarter
Helaas werken beide commando's niet. Hij voert ze wel uit, maar er wordt niks weggeschreven. Daarnaast krijg ik ook een ambiguous error, maar die heb ik weten te omzeilen.

  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

Is dit OS X?

Op Linux werkt het in ieder geval... Misschien dat er GNU-specifieke opties tussenzitten.

Edit: wacht es even - je hebt $file en $newfile toch vervangen door bestandsnamen hoop ik, en iets zonder dollarteken?

[ Voor 36% gewijzigd door Borromini op 07-09-2009 20:03 ]

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje


  • Fab1Man
  • Registratie: Februari 2006
  • Laatst online: 16:08

Fab1Man

Live life to the fullest

Topicstarter
Nee ik draai het op Ubuntu.
code:
1
tail -2 tempfile.txt >> hallo.txt

Als ik dit uitvoer gaat het eigenlijk goed, het probleem echter is dat hij bij de hallo.txt het er gewoon onderzet, en niet de laatste 2 regels vervangt.

  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

Tsja... Over vervangen had je dan ook niks gezegd. Daar zal je sed voor nodig hebben om de laatste twee regels van je doelbestand te verwijderen en dan de twee nieuwe regels toe te voegen, maar ik weet niet vanbuiten hoe dat gaat :).

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje


  • Fab1Man
  • Registratie: Februari 2006
  • Laatst online: 16:08

Fab1Man

Live life to the fullest

Topicstarter
Ok het is gelukt, eindelijk!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
mv "Release" Release.tmp
rm -f Packages.bz2
touch Packages
dpkg-scanpackages . /dev/null >Packages
bzip2 -k Packages
md5sum Packages
md5sum Packages.bz2
for i in Packages; do echo " `md5sum \"$i\"|cut -f1 -d ' '` `du -b \"$i\"`" >> tempfile.txt; done
for i in Packages.bz2; do echo " `md5sum \"$i\"|cut -f1 -d ' '` `du -b \"$i\"`" >> tempfile.txt; done
sed -e '10,11d' Release.tmp > "Release"
rm -f Release.tmp
tail -2 tempfile.txt >> "Release"
rm -f tempfile.txt
gpg -abs -o Release.gpg Release


Dit is het uiteindelijke script.

Nu heb ik eigenlijk alleen nog maar een klein dingetje. Bij het laatste commando wordt de Release file gesigned. Hiervoor moet ik een wachtwoord opgeven. Daarna vraagt ie of het bestand overschreven moet worden.
Kan ik het wachtwoord ingeven en het bevestigen van overschrijven ook nog automatiseren?

  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

Daarvoor moet je de manual van gpg checken. Ik weet dat openssh dat niet toelaat (althans, ik heb ernaar zitten zoeken maar zoiets nooit gevonden), en dat is ook met een goede reden: je paswoorden in cleartext is vragen om problemen :).

Een tip ivm sed: gebruik -i ipv -e, dan wijzigt ie het bestand rechtstreeks, hoef je a) geen nieuw bestand aan te maken en b) niet te hernoemen. Verder zie ik niet in waarom je md5sum vier maal aanroept - één keer voor de bzip2 archives en voor de Packages (dus twee lijnen) moet toch voldoende zijn, of vergis ik mij hierin?

[ Voor 19% gewijzigd door Borromini op 07-09-2009 20:55 ]

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje


  • Fab1Man
  • Registratie: Februari 2006
  • Laatst online: 16:08

Fab1Man

Live life to the fullest

Topicstarter
Ok bedankt voor de laatste tip. De manual had ik net al gevonden. Alvast heel erg bedankt!

  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

Ondertussen heb ik m'n reply gewijzigd :P. Als ik het goed begrijp heb je een bestand waarvan je de laatste twee regels vervangt? In plaats van met allemaal tijdelijke bestanden te werken kan je evt. ook sed gewoon de 10e en 11e regel laten vervangen door de output van alles tussen de backticks (`), maar dat zal wat gepuzzel vergen. Het houdt het wel lekker compact :9.

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje


  • Fab1Man
  • Registratie: Februari 2006
  • Laatst online: 16:08

Fab1Man

Live life to the fullest

Topicstarter
Die md5sums waren gewoon dubbel van het oude script, die heb ik verwijderd.
Dat met die backticks moet ik eens bekijken, is geloof ik nogal heftig :P.

  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

:P

Als de volgorde niet uitmaakt kan je de twee lijnen ook vervangen door één lijn met in het begin
code:
1
Packages{,.bz2}
als het om meerdere bestanden gaat, als het maar om twéé bestanden gaat kan je het sowieso vervangen door
code:
1
2
for i in Packages Packages.bz2
do blabla

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje


  • Fab1Man
  • Registratie: Februari 2006
  • Laatst online: 16:08

Fab1Man

Live life to the fullest

Topicstarter
Nu afgeslankt en al, als je nu ook nog weet hoe ik de output direct in de Release krijg, is ie zo klein mogelijk:
code:
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
rm -f Packages.bz2
touch Packages
dpkg-scanpackages . /dev/null >Packages
bzip2 -k Packages
for i in Packages Packages.bz2; do echo " `md5sum \"$i\"|cut -f1 -d ' '` `du -b \"$i\"`" >> tempfile.txt; done
sed -i '10,11d' "Release"
tail -2 tempfile.txt >> "Release"
rm -f tempfile.txt
gpg -abs -o Release.gpg Release

  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

Ik zou moeten puzzelen daarvoor, en die tijd heb ik voorlopig niet... Ik kan je wel je script even tweaken voor de rest (het zijn kleine dingen):

code:
1
2
3
4
5
6
7
8
9
#!/bin/bash
[ -e Packages.bz2 ] && rm -f Packages.bz2
dpkg-scanpackages . /dev/null >Packages
bzip2 -k Packages
for i in Packages Packages.bz2; do echo " `md5sum \"$i\"|cut -f1 -d ' '` `du -b \"$i\"`" >> tempfile.txt; done
sed -i '10,11d' Release
tail -2 tempfile.txt >> Release
rm -f tempfile.txt
gpg -abs -o Release.gpg Release


Je hoeft alleen dubbele quotes te gebruiken als in je variabele (of naam) spaties e.d. voorkomen.

Ok - sed zou als volgt gaan:
code:
1
sed -i "10s/blabla/bladibla/" Release
waarbij 10 de regel aanduidt.het echo commando drop je in de plaats van bladibla (ik denk niet dat daar veel aan gewijzigd dient. Het laatste probleem: uitvissen hoe je sed een hele regel kan laten vervangen door nieuwe input (dat weet ik namelijk niet, ik ben niet zo denderend met sed wildcards).

Laatste opmerking: > zal het bestand sowieso aanmaken als het niet bestaat, dus je touch-commando is overbodig :).

[ Voor 5% gewijzigd door Borromini op 07-09-2009 21:26 ]

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje


  • Fab1Man
  • Registratie: Februari 2006
  • Laatst online: 16:08

Fab1Man

Live life to the fullest

Topicstarter
Als iemand anders nog weet hoe ik de echo direct kan wegschrijven in de Release?

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 23-01 19:33

leuk_he

1. Controleer de kabel!

dit
du -b \"$i\"`" >> tempfile.txt; done

door

du -b \"$i\"`" >> Release; done

echo direct in file:

echo "DEZE TEKST IN RELEASE TEKST" > Release

[ Voor 25% gewijzigd door leuk_he op 08-09-2009 12:07 ]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • Fab1Man
  • Registratie: Februari 2006
  • Laatst online: 16:08

Fab1Man

Live life to the fullest

Topicstarter
Super!

Dit is de uiteindelijke code geworden:
code:
1
2
3
4
5
6
7
#!/bin/bash
[ -e Packages.bz2 ] && rm -f Packages.bz2
dpkg-scanpackages . /dev/null >Packages
bzip2 -k Packages
sed -i '10,11d' Release
for i in Packages Packages.bz2; do echo " `md5sum \"$i\"|cut -f1 -d ' '` `du -b \"$i\"`" >> Release; done
gpg -abs -o Release.gpg Release

  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

Eigenlijk had ik dat zelf ook moeten weten maar goed, als je je zo blindstaart op een probleem dan vernauwt je blik 8)7. Het is in ieder geval mooi hoe je van 14 regels code naar 6 gaat, da's toch minder dan de helft die je overhoudt voor net hetzelfde werk :).

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje


  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 23-01 19:33

leuk_he

1. Controleer de kabel!

Nu alleen nog commetaar in je code zetten he? zodat je het over 3 maanden nog snapt.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.

Pagina: 1