Sida 1 av 1
Förhindra radbrytning
Postat: 13 feb 2009, 08:21
av dmz
Jag vill lista alla filer som innehåller ett eller flera blanksteg. Tänkte då så här:
Kod: Markera allt
for dir in `\ls|grep '\ '`; do echo $dir; done
Vilket inte ger mig så fin output eftersom det inte enbart är 2 eller färre ord separerade med ett blanksteg. Hur gör jag?
Re: Förhindra radbrytning
Postat: 13 feb 2009, 10:22
av Konservburk
Re: Förhindra radbrytning
Postat: 13 feb 2009, 11:38
av dmz
Varför fungerar det där, men inte
Kod: Markera allt
for dir in `\ls|grep '\ '`; do echo "$dir"; done
?
Re: Förhindra radbrytning
Postat: 13 feb 2009, 15:48
av Konservburk
dmz skrev:Varför fungerar det där, men inte
Kod: Markera allt
for dir in `\ls|grep '\ '`; do echo "$dir"; done
?
Resultatet av det inre kommandot blir en enda lång sträng som sedan delas upp enligt $IFS utan att skalet har den blekaste aning om vad de faktiska filnamnen egentligen är.
Re: Förhindra radbrytning
Postat: 13 feb 2009, 15:59
av dmz
Vad menar du med "enligt $IFS"?
Re: Förhindra radbrytning
Postat: 13 feb 2009, 16:08
av mcNisse
Input Field Separator
Re: Förhindra radbrytning
Postat: 13 feb 2009, 16:19
av Konservburk
Internal Field Separators
Kod: Markera allt
Blank interpretation.
After parameter and command substitution, any results of substitution
are scanned for internal field separator characters (those found in
$IFS) and split into distinct arguments where such characters are
found.
Re: Förhindra radbrytning
Postat: 13 feb 2009, 16:24
av dmz
Tackar.

Re: Förhindra radbrytning
Postat: 13 feb 2009, 16:56
av Konservburk
Ska man vara riktigt petig så bör man se upp även med mitt förslag eftersom globben inte kommer att expandera ifall det inte finns några filnamn som innehåller mellanslag. Det som då händer är att for-loopen istället behåller själva globben, dvs "* *", och kör ett varv med den.
Re: Förhindra radbrytning
Postat: 13 feb 2009, 17:36
av dmz
Konservburk skrev:Ska man vara riktigt petig så bör man se upp även med mitt förslag eftersom globben inte kommer att expandera ifall det inte finns några filnamn som innehåller mellanslag. Det som då händer är att for-loopen istället behåller själva globben, dvs "* *", och kör ett varv med den.
Misstänker att du har någon snygg workaround?
Re: Förhindra radbrytning
Postat: 13 feb 2009, 19:00
av Konservburk
dmz skrev:Konservburk skrev:Ska man vara riktigt petig så bör man se upp även med mitt förslag eftersom globben inte kommer att expandera ifall det inte finns några filnamn som innehåller mellanslag. Det som då händer är att for-loopen istället behåller själva globben, dvs "* *", och kör ett varv med den.
Misstänker att du har någon snygg workaround?
Det beror lite på vad du tänker göra. Du kan t.ex. testa så att loop-variabeln är ett filnamn som verkligen finns:
Kod: Markera allt
for i in *\ *; do if test -e "$i"; then echo "$i"; fi; done
Annars är
find alltid ett bra alternativ:
Kod: Markera allt
find -maxdepth 1 -name '* *' -exec echo {} \;
Då kan du dessutom enkelt plocka bort
-maxdepth 1 om du även vill få med underkataloger.