2016-03-25 9 views
0

Ich brauche ein kleines Skript zu schreiben, die es Linien nach einem regulären Ausdruck findet (zum Beispiel „^ Ordner #), und es wird die Anzahl der Zeilen schreiben, wo es matchUNIX: Finding Linien

Meine Idee. ist, dass ich "find" verwenden werde, dann lösche alle Schrägstriche und verwende dann grep mit einem regulären Ausdruck. Ich weiß nicht, warum es nicht funktioniert. Könntest du einen Rat geben, wie du dich verbessern kannst oder wie ich es finden soll daß die Leitungen mit einer anderen Funktion?

In

./example 
./folder/.DS_Store 
./folder/file.png 

Out

2: ./folder/.DS_Store 
3: ./folder/file.png 

IGN="^folder$" 

find . -type f | sed -e "s/\// /g" | grep -n "${IGN}" 
+0

Warum sind Sie die Schrägstriche zu löschen? Vielleicht ist "wc", was Sie suchen, überprüfen Sie die Option "-l". –

+0

Sie wollen nicht ''^Ordner $ "'. Probiere einfach 'IGN =" folder "' oder um super-explizit zu sein, probiere '="/folder/"'. Viel Glück. – shellter

+0

Nun, weil ich dachte, dass "^ Ordner #" bedeutet, dass vor und nach diesem Wort nichts ist - das ist der Grund, warum ich den Raum nutze. – user3463055

Antwort

0

versuchen Sie

IGN="^folder$" 
find . -type f | sed -e "s/\// /g" | grep -n "${IGN}" 

Dieses Skript funktioniert nicht, da IGN für Start-of-line sieht verwendet ändern müssen, nicht Wortanfang.
Sie können Linien machen aus den Teilen der Pfade mit

IGN="^folder$" 
find . -type f | tr -s "/" "\n" | grep -n "${IGN}" 
1

Sie sagen, Sie ^folder$ Muster verwenden möchten, aber Sie wollen Ausgabe erhalten wie:

2: ./folder/.DS_Store 
3: ./folder/file.png 

Diese beiden Anträge einander widersprechen . Eine Zeile wie ./folder/.DS_Store kann Muster ^folder$ nicht übereinstimmen, da die Zeile nicht mit "Ordner" beginnt und nicht mit "Ordner" endet.

Um die Ausgabe, die Sie beschreiben Sie das Muster mit grep-^\./folder/