Wenn ich mache:
$ ls -R
.:
4Shared/ Cloud/
./4Shared:
UFAIZLV2R7.part3.rar
./Cloud:
UFAIZLV2R7.part2.rar.part
UFAIZLV2R7.part1.rar.part
UFAIZLV2R7.part4.rar.part
Wenn ich .rar
nur die Dateien auflisten möchte und grep verwende , werden mir auch die .rar.part
Dateien angezeigt, was nicht mein Wunsch ist.
Ich löse dies mit find
oder ls **/*.rar
wie in diesem Thread beschrieben und sie funktionieren einwandfrei, aber ich würde gerne erfahren, ob es möglich ist, dies über zu tun grep
.
Ich habe versucht (nachzudenken EOL
):
ls -R | grep ".rar\n"
ohne ergebnisse.
Ich denke, dass das Problem darin liegt, herauszufinden, ob das Greifen am Ende der Zeile gefunden wird , aber ich bin nicht sicher.
Können Sie uns bitte hier weiterhelfen?
grep
in diesem Fall verwenden? Warum nichtfind
?find
Befehl widerspricht dem von Windows) und ... Lernen ;-). Die Fragels -1R
.grep
. Siehe meine Antwort.-1R
Schalter passieren . Anscheinend sind die Ergebnisse gleich.Antworten:
Der
$
Anker stimmt mit dem Ende einer Zeile überein.Sie können dafür auch verwenden
find
:quelle
Zusätzlich zu Ihrer Frage beachten Sie bitte, dass
.rar
nicht nur ".rar", sondern jedes einzelne Zeichen (einschließlich.
) vor dem ".rar" übereinstimmtrar
. In diesem Fall wahrscheinlich kein Problem, sondern.
muss in regulären Ausdrücken maskiert werden.quelle
.asc
ist wie*asc
Muster? So wird es zum Beispiel passenwhereverasc
.xrar
.Sie können auch anweisen
grep
, nach einer Zeichenfolge zu suchen, die an einer Wortgrenze beginnt. A.
ist eine dieser Grenzen.Beispiel
Angenommen, ich habe diese Beispieldaten.
Dieser Befehl würde nur die Datei mit der
.rar
Erweiterung finden.Wie funktioniert das?
Situationen, in denen dies nicht funktioniert
Wenn Sie Dateien mit Namen haben, werden
blah-rar
diese ebenfalls erkannt.Dies liegt daran, dass andere Zeichen als alphanumerische Zeichen normalerweise als Begrenzungszeichen betrachtet werden und daher an diesem Ansatz vorbeigehen würden.
quelle
"
anstelle einfacher Anführungszeichen verwende?.rar
. Dies ist jedoch kein Problem bei der Verwendung vonls -R
. Nur wenn du es zufällig benutzt hastls -Ra
.-P
Umstieg aufgrep
in meinem Beispiel. Dies löst eine PCRE-Interpretation des Arguments aus.\n
) enthält, das ein zulässiges Zeichen ist. Dasls -1R
zwingt die Dateien unabhängig in einer einzigen Spalte angezeigt werden.Mach einfach :
Das brauchst du gar nicht
grep
.ANMERKUNG: Das oben Genannte funktioniert ... außer es wird immerhin noch
afile-rar
und ich verstehe nicht warum. Ich lasse es hier, aber ich bin nicht stolz darauf. Auf jeden Fall, wie andere gesagt haben:quelle
xrar
oder blockiertafile-rar
.afile-rar
undxrar
werden weiterhin in die Ausgabe einbezogen. Auch bei deinen neuesten Mods gibt es keine Änderungen. Lästiges Problem nein? Es macht Spaß, es ohne die üblichen Methoden zu lösen. 8-)-dash
durchkommt. Diexrar
Sache, die ich behandeln konnte, aber nicht die-dash.
ich nicht verstehe-dash.
Verwenden Sie einfache Anführungszeichen, damit das $ als Zeilenende funktioniert. Wenn Sie auch eine Variable verwenden möchten, verwenden Sie die folgende Kombination aus doppelten und einfachen Anführungszeichen:
Mein vorheriger Beitrag wurde gelöscht, da er doppelt vorhanden ist. Lassen Sie mich erklären, wie das anders ist.
In den anderen Beiträgen wird entweder die vollständige Verwendung von doppelten Anführungszeichen
""
oder die vollständige Verwendung von einfachen Anführungszeichen erwähnt''
. Sie haben beide ihre eigenen Grenzen. Das Folgende erklärt es.Das Problem mit allen doppelten Anführungszeichen ist folgendes:
grep "pattern$"
gibt folgenden Fehler aus:Illegal variable name.
Die Verwendung aller einfachen Anführungszeichen funktioniert, aber wenn Sie eine variable Ersetzung wünschen, funktionieren alle einfachen Anführungszeichen nicht . Zum Beispiel:
Wenn ich eine Zeichenfolge habe
A_BOOK
, einschließlich anderer Zeichenfolgen in einer Datei DATEI.Wenn ich das BOOK auf eine Variable BK setze
Wenn ich mit allen doppelten Anführungszeichen grep, erhalte ich den folgenden Fehler::
grep "${BK}$" FILE*
1. $ für die Variablensubstitution, 2. für das Ende des Musters ( unzulässiger Variablenname ).Wenn ich mit allen einfachen Anführungszeichen greife, findet die Variablensubstitution nicht statt.
grep '${BK}$' FILE
gibt nichts zurückWenn ich eine Kombination aus doppelten und einfachen Anführungszeichen verwende, erhalte ich das, was ich erwarte. Doppelte Anführungszeichen für die Variablensubstitution und einfache Anführungszeichen für das Musterende.
quelle
"foo$"
Syntax funktioniert gut für sh und family.Wenn nach dem Befolgen der obigen Anweisungen nichts funktioniert, kann dies an Zeilenenden liegen. Um das Problem zu beheben, führen Sie Folgendes aus:
dos2unix pr0n.txt
undgrep
wiederholen Sie den Vorgang.quelle