Frank Damgaard<frank_sslug@xxxxxxxxxxxxxx> writes:
On 2012-02-14 22:18, Eskild Nielsen wrote:
JEg havde lavet en serie af bash scripts på min linux laptop, og ville prøve at køre dem
på en MAC
Succesen var mildest talt behersket, idet sed virker temmelig anderledes
Mac bruger hverken unix linieskift \n eller windows/Dos \r\n
OS X er en unix og bruger internt \n til at angive linje-skift i
tekstfiler. Det gælder dens evindelige XML-filer, tekstfiler skrevet med
TextEdit og kildetekst skrevet i XCode.
Men de grafiske programmer supporterer vist stadigvæk filer med den den
gamle MacOS konvention transperant for brugeren. Men det er ikke den
normale OSX konvention for linjeskift.
Jeg skulle blandt andet indsætte et linieskift i en textfil, hver gang der var>< i filen
på linux: sed 's!><!>\n<!g' filnavn
men på mac bliver \n ikke opfattet som kontoltegn, men bliver taget for pålydende
Jeg er ikke sikker på hvad posix siger om sed-sproget, men jeg kan godt
reproducere dit problem. Ovenstående virker fint som perl-script, men
perl er heller ikke belastet af forskellige implementationer der tager
små forskellige valg.
Mit bedste bud på en kommando der virker som specificeret er:
$ sed $'s!><!>\\\n<!g' filename
Det virker under både Linux og OS X. Dollar-enkelt plinger er for at få
shellen til at fortolke escape sekvenserne. De to første backslashs
bliver så til en, som sed så ser og derfor gør "det rigtige".
//Makholm