grep hulp: /bin/ls ~/library/widgets | /usr/bin/grep .&

[code:1:7a270a1b61]/bin/ls ~/library/widgets | /usr/bin/grep .&/[/code:1:7a270a1b61]

Geeft niet helemaal wat ik wil.

Ik wil een lijstje van alle directories in de user’s zijn widget directory… Maar dit comando eindigt niet, direct na het printen van het op zich juiste lijstje. Wat doe ik verkeerd?

[code:1:47de855235]ls -l ~/Library/Widgets | grep ^d[/code:1:47de855235]

grep filtert dan alleen de regels uit die met ‘d’ beginnen (wat dus een directory is).

En als je eigenlijk geen 'long format' wil: [code:1:f75af800c6]ls -l ~/Library/widgets | grep ^d | awk '{print $9}'[/code:1:f75af800c6]

Iets eenvoudiger alternatief: [code:1:d2c0de77ff]find ~/Library/Widgets -type d[/code:1:d2c0de77ff] Dit geeft simpelweg een lijst met directory namen; wil je meer info: [code:1:d2c0de77ff]find ~/Library/Widgets -type d -ls[/code:1:d2c0de77ff]

Hmmz...

Moet toch is wat beter om leren gaan met command line word processors en grep.

noticed;)

[quote:90a9c7b8e6="savvy"][code:1:90a9c7b8e6]ls -l ~/Library/Widgets | grep ^d[/code:1:90a9c7b8e6]

grep filtert dan alleen de regels uit die met ‘d’ beginnen (wat dus een directory is).[/quote:90a9c7b8e6]

En dan moet ie nog de eerste zoveel karakters er af hakken…
Maar de usernaam is variabel… Ieks…

Je kan toch wel met grep gewoon iets weg gooien. Meerdere reg exes en dan 1 daarvan in je resultaat 1 of meerdere keren opnemen. Beetje zoals eniac met awk deedt.

Want van dit:

[quote:90a9c7b8e6]
drwxr-xr-x 10 jeroenle jeroenle 340 Apr 30 10:43 Countdown Calendar.wdgt
drwxr-xr-x 18 jeroenle jeroenle 612 Apr 30 01:26 CtrlAltDel.wdgt
drwxr-xr-x 20 jeroenle jeroenle 680 May 6 07:09 DashBlog.wdgt
drwxr-xr-x 10 jeroenle jeroenle 340 May 9 21:39 Gouden Gids.wdgt
drwxrwxr-x 13 jeroenle jeroenle 442 Apr 30 11:06 RSSBean.wdgt
drwxr-xr-x 9 jeroenle jeroenle 306 May 7 14:33 Teletekst.wdgt
drwxr-xr-x 20 jeroenle admin 680 May 8 00:28 Uptime.wdgt
drwxrwxr-x 10 jeroenle jeroenle 340 Apr 30 01:11 Van Dale.wdgt
drwxrwxrwx 10 jeroenle admin 340 Apr 30 10:41 VersionTracker.wdgt
drwxr-xr-x 9 jeroenle jeroenle 306 May 1 23:18 WoWServerStatus.wdgt
[/quote:90a9c7b8e6]

Wil ik dit maken:

[quote:90a9c7b8e6]
Countdown Calendar.wdgt
CtrlAltDel.wdgt
DashBlog.wdgt
Gouden Gids.wdgt
RSSBean.wdgt
Teletekst.wdgt
Uptime.wdgt
Van Dale.wdgt
VersionTracker.wdgt
WoWServerStatus.wdgt
[/quote:90a9c7b8e6]

Spaties in file en directory namen, zou verboden moeten worden.

Heb je mijn commando geprobeerd , die doet dat ...

Countdown Calendar bevat een spatie...

En het awk statement matched de 9de token. Dus hij mietert alles na Countdown weg.

Bijna, maar niet helemaal.

Ben er al achter dat grep het niet kan iig. Grep print enkel dat wat een regex matched. Dus dingen matchen om niet te tonen zou vervelend gaan.

Ik had zelf eerst bedacht om te matchen op het aantal tokens, wat je met awk ook eigenlijk doet. Maar om dan vanaf het 9de token tot het einde te printen.

Het idee is trouwens een widget trasher widget. Hoef ik niet zelf met de finder te klikken naar de juiste dir. Kwestie van een rm aanroepen met de juiste argumenten. En zorgen dat de widget full access heeft (Dat heeft ie volgens mij als de widget in ~/library/widgets staat, alleen wel even de juiste property in de Info.plist van de widget.)

Als het ooit gaat werken dan ga ik ook kijken of ik misschien nog het proces kan killen.

ooh sorry had je uitleg niet helemaal begrepen, gebruik dan en for lusje zoals ... awk '{for (i=9;i<=NF;i++) {printf "$i "} print ""}'

Leuk dat jullie zo bezig zijn met grep en awk en lusjes voor een lijstje directory namen, als ik het tenminste goed begrijp :? maar voor het gemak is het misschien toch een idee om nog even naar het find commando kijken…?

Als je alleen de .wdgt directories op het hoogste niveau in ~Library/Widgets wilt hebben wordt het:

[code:1:c8e0c1ec27]find ~/Library/Widgets -type d -maxdepth 1 -name ‘*.wdgt’[/code:1:c8e0c1ec27]

En als je het dan toch graag met 'ls' wil doen: [quote:f6844533e8]ls -F ~/Library/Widgets | grep '/$' |tr -d '/'[/quote:f6844533e8] volgens mij heb je dan wat je zocht?

Groeten!

Maikel

[quote:8c0b3d1192="The - DDD"][code:1:8c0b3d1192]/bin/ls ~/library/widgets | /usr/bin/grep .&/[/code:1:8c0b3d1192]

Geeft niet helemaal wat ik wil.

Ik wil een lijstje van alle directories in de user’s zijn widget directory… Maar dit comando eindigt niet, direct na het printen van het op zich juiste lijstje. Wat doe ik verkeerd?[/quote:8c0b3d1192]

Volgens mij gaat het voor jou mis op die ‘&’. Een ‘&’ in een shell-script zorgt ervoor dat het programma ervoor in de achtergrond draait, en jouw shell meteen weer terug komt. Tik maar eens ‘jobs’ in, en waarschijnlijk die je dan iets als:

[code:1:8c0b3d1192][maikel@mactop-wi] [24] [~]% /bin/ls ~/library/widgets | /usr/bin/grep .&/
[1] 8032 8033
tcsh: /: Permission denied.
Van Dale.wdgt
[maikel@mactop-wi] [25] [~]% jobs
[1] Done /bin/ls ~/library/widgets | /usr/bin/grep .
[maikel@mactop-wi] [26] [~]%
[/code:1:8c0b3d1192]

Een ‘&’ kan in een shell ook gebruikt worden om output-redirection om te leiden, maar dat is wat “hogere” shellscripting. (in een bash-achtige shell: ‘2>&1’ bijvoorbeeld, in een csh-achtige shell: ‘>&’ , maar dat lijk je niet te willen volgens mij)

Groeten!

Maikel

Kortom, ik moet maar niet weer 's avonds vlak voor het slapen gaan met grep en awk en dergelijken bezig houden.

Ik zal vanavond is de verschillende genoemde oplossingen proberen.

Nu we er toch mee bezig zijn, waar zijn goede docs te vinden over AWK, GREP en aan verwante tekst gerelateerde tools? (Anders dan de man-pages en de advanced bash scripting guide van tldp.org.)

Hoe ik het de volgende keer niet meer te vragen… :wink: En dat van die ‘&’ was wel even een gevalletje, oh ja… shit. Maar ik dacht toch echt zoiets inde man-page gezien te hebben. :cry:

http://localhost.nl/o , je hebt dit niet van mij ;) ps: sed & awk 2nd edition

Dat awk voorstel werk niet helemaal lekker geloof ik. Ik plak het ipv. het voorgaande voorbeeld met awk.

Die find komt aardig in de buurt, ware het niet dat er nog wel het pad voor staat.

Met find wordt het dan zoiets als (één regel): [code:1:b0d5b7a946]find ~/Library/Widgets -type d -maxdepth 1 -iname '*.wdgt' | xargs basename[/code:1:b0d5b7a946]

[quote:e795371f30="The - DDD"]Dat awk voorstel werk niet helemaal lekker geloof ik. Ik plak het ipv. het voorgaande voorbeeld met awk.

Die find komt aardig in de buurt, ware het niet dat er nog wel het pad voor staat.[/quote:e795371f30]

Had ik snel ff geschreven zaten nog wat bugs in hier heb je de werkende versie:

[code:1:e795371f30]$ cat test.awk
{
for(i=9; i<=NF; i++)
printf "%s ", $i
print " "

}
$ !ls
ls -l | awk -f test.awk

Desktop
Documents
First
Incomplete
Library
Mail
Movies
Music
Pictures
Public
Shared
Sites
annelies vs jonas.game
dump
eclipse-workspace
foo bar
foobar bar
ideetjes
instantclient10_1
languages
projects
test.awk
xcode-projects [/code:1:e795371f30]

[quote:36f11a0542="Roeland"]Met find wordt het dan zoiets als (één regel): [code:1:36f11a0542]find ~/Library/Widgets -type d -maxdepth 1 -iname '*.wdgt' | xargs basename[/code:1:36f11a0542][/quote:36f11a0542]

Argh!! Weer een nieuw commando “xargs”. :wink:

eniac:
Yups hij werkt. Maar mijn idee is door de realiteit al ingehaald: http://www.downtownsoftwarehouse.com/WidgetManager/