sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #102169
Re: Transmogriffe linux bash scripts til mac bash scripts
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
Follow ups
References