furkan42
Anmeldungsdatum: 22. April 2018
Beiträge: Zähle...
|
mit grep eine Liste aller Dateien im Verzeichnis „/bin“ ausgeben, deren Dateiname mit c anfängt und an beliebiger Stelle ein „o“ enthält? so ich komme damit irgendwie nicht klar ich weis, dass grep -l "^c" /bin/*
mein ansatz sein sollte jedoch weis ich nicht wie ich an einer beliebigen stelle ein o suchen soll
könnte mir jemand sagen wie der richtige befehl dazu ist. Bearbeitet von rklm: Titel aussagekräftiger gemacht
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12836
|
Wir geben hier Hilfe zur Selbsthilfe - wir sind nicht die Hausaufgabenhotline. Du solltest wenigstens zeigen, was Du bisher hast.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11181
Wohnort: München
|
Ein o an beliebiger Stelle heißt ja, dass es zwischen dem c und dem o beliebig viele andere Zeichen geben kann. Und ich würde noch mal einen Blick in die Manpage von grep werfen, denn der von dir angedachte Befehl sucht in den Dateien in /bin/, aber nicht in ihren Namen. grep ist da IMHO eine merkwürdige Wahl, find wäre da in meinen Augen viel praktischer.
|
furkan42
(Themenstarter)
Anmeldungsdatum: 22. April 2018
Beiträge: 15
|
rklm schrieb: Wir geben hier Hilfe zur Selbsthilfe - wir sind nicht die Hausaufgabenhotline. Du solltest wenigstens zeigen, was Du bisher hast.
wäre nett wenn du zuerst alles liest bevor du hier aufmuckst 😉
ich habe wie gesagt selber einen ansatz gefunden mein problem war nur das mit dem Buchstaben o
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4578
Wohnort: Berlin
|
@seahawk1986: find würde ich da zusätzlich verwenden, denn irgendwie müssen die Namen ja in grep rein kommen und die Ausgabe von ls sollte man ja eher nicht weiterverarbeiten. ☺
|
furkan42
(Themenstarter)
Anmeldungsdatum: 22. April 2018
Beiträge: 15
|
seahawk1986 schrieb: Ein o an beliebiger Stelle heißt ja, dass es zwischen dem c und dem o beliebig viele andere Zeichen geben kann. Und ich würde noch mal einen Blick in die Manpage von grep werfen, denn der von dir angedachte Befehl sucht in den Dateien in /bin/, aber nicht in ihren Namen. grep ist da IMHO eine merkwürdige Wahl, find wäre da in meinen Augen viel praktischer.
vielen dank für die Antwort, das problem meinerseits ist das ich dies als aufgabe bekommen habe und mit grep die sachen lösen muss wie du schon sagtest es kann beliebig viele andere zeichen geben muss aber nicht und das ist auch mein problem buchstabe o kann nach c folgen oder an 3ter stelle oder sonstwo
|
frostschutz
Anmeldungsdatum: 18. November 2010
Beiträge: 7658
|
Dateiname mit c anfängt und an beliebiger Stelle ein „o“ enthält?
Eigentlich macht man das ja mit einfachem Globbing... $ ls /bin/c*o*
/bin/chmod /bin/chown /bin/chroot /bin/cpio grep ist fürs durchsuchen von DateiINHALTEN zuständig, was bei Binärdateien selten einen Sinn ergibt.
|
furkan42
(Themenstarter)
Anmeldungsdatum: 22. April 2018
Beiträge: 15
|
frostschutz schrieb: Dateiname mit c anfängt und an beliebiger Stelle ein „o“ enthält?
Eigentlich macht man das ja mit einfachem Globbing... $ ls /bin/c*o*
/bin/chmod /bin/chown /bin/chroot /bin/cpio grep ist fürs durchsuchen von DateiINHALTEN zuständig, was bei Binärdateien selten einen Sinn ergibt.
vielen dank für deine Antwort
unser prof hat die aufgabenstellung wies scheint falsch gestellt ich glaube das hiermit auch dateiinhalt gemeint ist was von meinem Ansatz auch deutlich sein sollte
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4578
Wohnort: Berlin
|
@furkan42: Ich glaube nicht dass das falsch dargestellt war, denn es ist sehr unwahrscheinlich das es in /bin Dateien mit dem *Inhalt* c als erstes Byte und dann ein o irgendwo darin, geben wird. Ich denke mal es soll hier auf den Unterschied zwischen globbing Mustern und regulären Ausdrücken eingegangen werden, dass zum Beispiel in beiden * als besonderes Zeichen vorkommen, aber in beiden etwas unterschiedliches bedeuten. Ich kann mich jedenfalls dunkel daran erinnern das Du ein Buch in einem anderen Thema erwähntest, und da war das IIRC so. Bei mir sieht's so aus:
| $ find /bin -maxdepth 1 -type f -printf "%f\0" | grep -z "$regex" | tr '\000' '\n'
checkpassword
chmod
chown
cpio
|
Den Inhalt für $regex verrate ich jetzt mal nicht. ☺
|
furkan42
(Themenstarter)
Anmeldungsdatum: 22. April 2018
Beiträge: 15
|
Marc_BlackJack_Rintsch schrieb: @furkan42: Ich glaube nicht dass das falsch dargestellt war, denn es ist sehr unwahrscheinlich das es in /bin Dateien mit dem *Inhalt* c als erstes Byte und dann ein o irgendwo darin, geben wird. Ich denke mal es soll hier auf den Unterschied zwischen globbing Mustern und regulären Ausdrücken eingegangen werden, dass zum Beispiel in beiden * als besonderes Zeichen vorkommen, aber in beiden etwas unterschiedliches bedeuten. Ich kann mich jedenfalls dunkel daran erinnern das Du ein Buch in einem anderen Thema erwähntest, und da war das IIRC so. Bei mir sieht's so aus:
| $ find /bin -maxdepth 1 -type f -printf "%f\0" | grep -z "$regex" | tr '\000' '\n'
checkpassword
chmod
chown
cpio
|
Den Inhalt für $regex verrate ich jetzt mal nicht. ☺
vielen dank für die mühe es kann sein das du recht hast aber soweit ich die aufgabenstellung mitbekommen habe sollen wir nur den befehl grep benutzen meinte unser prof und die vorherigen aufgaben basieren auf diese Aufgabe und dort war auch nach Dateiinhalt gefragt
außerdem meintest du es würden nicht solche dateiinhalte existieren aber in dem bin Ordner werden doch dateiinhalte wie z.b wenn ich 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | grep -i "^c" /bin/*
/bin/zforce:Copyright (C) 2010-2013 Free Software Foundation, Inc.
/bin/zgrep:case $1 in
/bin/zgrep:Copyright (C) 2010-2013 Free Software Foundation, Inc.
/bin/zless:case $1 in
/bin/zless:Copyright (C) 2007, 2011-2013 Free Software Foundation, Inc.
/bin/zless:case $1 in
/bin/zless:case $less_version in
/bin/zmore:case $1 in
/bin/zmore:Copyright (C) 2010-2013 Free Software Foundation, Inc.
/bin/zmore:case $1 in
/bin/znew:case $1 in
/bin/znew:Copyright (C) 2010-2013 Free Software Foundation, Inc.
/bin/znew:check=0
/bin/znew:case "$opt" in
/bin/znew:case "$opt" in
/bin/znew:case "$opt" in
|
das ist nur ein kleinteil mit dateiinhalten wo z.b c und o existiert jedoch ist mein befehl nur basierend auf anfangbuchstabe c, weil ich nicht weis wie ich o an einer beliebigen stelle suchen soll natürlich mindestestens einmal
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11181
Wohnort: München
|
Vermutlich ist das nicht im Sinne des Erfinders, aber es geht mit grep (und Shell-Globbing, wie von frostschutz angedacht):
grep -ls '.' /bin/c*o*
# oder wenn man lieber mit grep filtert:
grep -ls '.' /bin/* | grep "$regex"
Wobei du dir den $regex für die zweite Option selbst überlegen darfst ☺
|
furkan42
(Themenstarter)
Anmeldungsdatum: 22. April 2018
Beiträge: 15
|
seahawk1986 schrieb: Vermutlich ist das nicht im Sinne des Erfinders, aber es geht mit grep (und Shell-Globbing, wie von frostschutz angedacht):
grep -ls '.' /bin/c*o*
# oder wenn man lieber mit grep filtert:
grep -ls '.' /bin/* | grep "$regex"
Wobei du dir den $regex für die zweite Option selbst überlegen darfst ☺
danke für deine mühe und deine antwort was ich aber nicht verstehe seid ihr die profs aus meiner fh oder warum probiert jeder hier den regex zu verbergen natürlich ist es schön wenn man selber sucht probiert und dadrauf kommt aber wenn ich nicht draufkomme dann kommts halt nicht und die lösung zu kriegen und die lösung danach nachzuvollziehen ist denke ich viel besser als stundenlang einen regex zu suchen
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
furkan42 schrieb: mit grep eine Liste aller Dateien im Verzeichnis „/bin“ ausgeben, deren Dateiname mit c anfängt und an beliebiger Stelle ein „o“ enthält?
Wenn das die Aufgabenstellung im Wortlaut ist, dann soll der Dateiname mit c anfangen (von C war nicht die Rede) und ein o enthalten, also und der Dateiname soll ..., nicht die Datei, sonst hätte man das dazuschreiben müssen. Soweit würde ich das mit | ls /bin/c*o*
/bin/chmod /bin/chown /bin/cpio
|
machen. In /bin/ würde ich auch keinen Dateinamen Zeilenumbruch darin erwarten. Selbst nicht mit Leerzeichen und Pagefeeds und ähnlichem. Allerdings weiß ich nicht, wie man da Gebrauch von grep machen soll erschließt sich mir nicht, auch nicht auf den 2. Blick. Gut, es soll grep gelernt werden? Man könnte den Job so aufteilen, dass man mit grep nur das o sucht:
| ls /bin/c* | grep o
/bin/chmod
/bin/chown
/bin/cpio
|
Mit einem i statt o würde das so einfach nicht gehen. Man müsste wissen ob das kleinstes Anfängerniveau ist und was gerade gelernt wird - pipes, ls, reguläre Ausdrücke, globbing, ... ? | egrep -l -E "." /bin/c*o*
/bin/chmod
/bin/chown
/bin/cpio
|
wäre auch noch möglich. Das sucht nach einem beliebigen Zeichen, wobei Dateien leer sein dürfen, aber in /bin nicht wirklich was zu suchen hätten.
|
furkan42
(Themenstarter)
Anmeldungsdatum: 22. April 2018
Beiträge: 15
|
user_unknown schrieb: furkan42 schrieb: mit grep eine Liste aller Dateien im Verzeichnis „/bin“ ausgeben, deren Dateiname mit c anfängt und an beliebiger Stelle ein „o“ enthält?
Wenn das die Aufgabenstellung im Wortlaut ist, dann soll der Dateiname mit c anfangen (von C war nicht die Rede) und ein o enthalten, also und der Dateiname soll ..., nicht die Datei, sonst hätte man das dazuschreiben müssen. Soweit würde ich das mit | ls /bin/c*o*
/bin/chmod /bin/chown /bin/cpio
|
machen. In /bin/ würde ich auch keinen Dateinamen Zeilenumbruch darin erwarten. Selbst nicht mit Leerzeichen und Pagefeeds und ähnlichem. Allerdings weiß ich nicht, wie man da Gebrauch von grep machen soll erschließt sich mir nicht, auch nicht auf den 2. Blick. Gut, es soll grep gelernt werden? Man könnte den Job so aufteilen, dass man mit grep nur das o sucht:
| ls /bin/c* | grep o
/bin/chmod
/bin/chown
/bin/cpio
|
Mit einem i statt o würde das so einfach nicht gehen. Man müsste wissen ob das kleinstes Anfängerniveau ist und was gerade gelernt wird - pipes, ls, reguläre Ausdrücke, globbing, ... ? | egrep -l -E "." /bin/c*o*
/bin/chmod
/bin/chown
/bin/cpio
|
wäre auch noch möglich. Das sucht nach einem beliebigen Zeichen, wobei Dateien leer sein dürfen, aber in /bin nicht wirklich was zu suchen hätten.
lieb von dir vielen dank
|
BillMaier
Supporter
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6473
|
echo /bin/c*o* und wenn laut Aufgabenstellung ein grep im Befehl sein muss echo /bin/c*o* |grep bin 😀
|