← Back to team overview

sslug-teknik team mailing list archive

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