[bash] grep|sed werkt niet op Mac i.v.m. encoding leestekens

Pagina: 1
Acties:
  • 374 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • benoni
  • Registratie: November 2003
  • Niet online
Ik wilde een scriptje maken die van Illustrator PDF files de naam en wijzigingsdatum herstelt aan de hand van de metagegevens die door Illustrator in de PDF worden meebewaard. Dit is nodig omdat door een 'gevalletje Murphy' een groot aantal Illustrator bestanden verloren zijn gegaan. Deze zijn teruggevist met het recovery programma 'Boomerang'. Dat programma bewaart echter de bestanden op volgnummer, dus de namen en datums moeten we zelf herstellen.

Nu kom ik telkens weer uit op hetzelfde probleem: ik gebruik regular expressions om de namen en datums uit de PDF source te vissen, maar dat werkt niet goed in de bash van MacOSX. In een editor zoals TextWrangler werkt het wel, ik kan op een Linux systeem ook probleemloos door de bestanden heen greppen, maar gebruik ik precies dezelfde opdrachten onder MacOSX dan gaat het fout. Het blijkt door leestekens te komen, greppen op 'Title' geeft resultaat, greppen op '%%Title' niet.

Voorbeeld oneliner:
text=`head -n 8 ./test.pdf`; \
echo $text | sed -n "s/.*%%Title:\s(\([^)]*\)).*/\1/p"


Omdat de Apple bash blijkbaar niet automagisch de codering gaat casten, probeer ik met iconv naar een andere codetabel te converteren:
text=`head -n 8 ./test.pdf | iconv -f MAC -t UTF8`; \
echo $text | sed -n "s/.*%%Title:\s(\([^)]*\)).*/\1/p"


Ik heb alleen geen idee van en naar welke codetabel ik moet converteren (ik ben onderwijl wel de PDF-specificatie van Adobe aan het downloaden, misschien staat daar wat in).

Zijn deze problemen met tekstcodering normaal voor de Mac, of is mijn systeem stuk?

Als het (met jullie hulp) een beetje gaat lukken zal ik het complete script hier posten, altijd handig voor wie 't nogges nodig heeft :)

Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

Heb je een PDF voor ons? In mijn eigen (met Indesign CS 2 gemaakte) bestanden kan ik die hele Title header nergens vinden namelijk :)

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

  • benoni
  • Registratie: November 2003
  • Niet online

Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

Ik zie eerlijk gezegd de Title header nog steeds niet. Je PDF's lijken trouwens DOS newlines te hebben, dat helpt ook niet bepaald bij het greppen :)

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

  • benoni
  • Registratie: November 2003
  • Niet online
dawuss schreef op zaterdag 20 januari 2007 @ 20:06:
Ik zie eerlijk gezegd de Title header nog steeds niet. Je PDF's lijken trouwens DOS newlines te hebben, dat helpt ook niet bepaald bij het greppen :)
Oh, ik ziet het... na opnieuw bewaren stond het blokje met %%Title opeens helemaal onderaan.
Dan werkt 'head -n 8' natuurlijk niet meer, moet 'cat' worden...

Die DOS newlines daar kan ik dus eigenlijk niets aan doen, dat hoort blijkbaar zo bij het Illustrator PDF formaat, we kunnen erop rekenen dat alle bestanden in 't archief deze newlines hebben.

[ Voor 18% gewijzigd door benoni op 22-01-2007 15:20 ]


Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

Of tail ;)

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

  • benoni
  • Registratie: November 2003
  • Niet online
Tja 8)7

Ik heb er maar een bestandje bijgezet met de headers netjes bovenin: test.ai O-)

Update
Ik heb het probleem met de bash niet kunnen oplossen, maar in perl gaat het wel goed dus:
echo $text | perl -C -pe 's/.*%%Title:\s\(([^)]*).*/$1/;'

't Complete script staat in "Het grote "handige scripts" topic"

[ Voor 67% gewijzigd door benoni op 21-01-2007 07:24 ]


Acties:
  • 0 Henk 'm!

  • benoni
  • Registratie: November 2003
  • Niet online
Inmiddels heb ik een hoop aangepast aan het complete script, nu wordt er onderscheid gemaakt tussen PS-Adobe-3.0, PS-Adobe-3.1 en PDF files om de juiste gegevens uit de bestanden te vissen.
dawuss schreef op zaterdag 20 januari 2007 @ 20:06:
Je PDF's lijken trouwens DOS newlines te hebben, dat helpt ook niet bepaald bij het greppen :)
De PDF bestanden parse ik nu eerst door het 'strings' commando heen om een ruwe filtering te maken op leesbare tekst. Daardoor zijn er ook weer Unix regeleinden tussengevoegd. Daarna kan ik ineens wel met sed greppen, maar ik moet daarbij wel de ( ) { } in de grep 'verkeerd om' escapen, en '\d' herkent ie niet, daar heb ik maar '[0-9]' van gemaakt :P Dat laatste zal wel te maken met een typische manier van commando's parsen door de MacOSX bash. Ik kan me niet herinneren dat ik onder Linux dit soort quirks tegenkwam.
Pagina: 1