Für den Datensatz [...]stimmt das Konstrukt mit einem einzelnen Zeichen überein, bei dem es sich um eines der Zeichen in Klammern handeln kann. Ihr Ausdruck stimmt also mit JJA oder Jug( Jvon [Jun], uvon [Jul]und gvon [Aug]) überein, aber nicht mit den Monatsabkürzungen, auf die Sie gehofft haben.
Tripleee
Antworten:
12
Sie können mehrere Muster wie folgt abgleichen:
awk '/Jun/ || /July/ || /Aug/'<(ls -lrh)
Dies gibt alle Übereinstimmungen für Juni, Juli oder August zurück. Sie benötigen die printAnweisung nicht, da dies die awkStandardaktion ist.
awk versteht erweiterte reguläre Ausdrücke, so dass Sie für ein Muster, das so einfach ist, dass Sie es als awk '/Jun|Jul|Aug/'or schreiben könnenawk '/Ju[nl]|Aug/'
cas
5
In der Regel ist es eine sehr schlechte Idee, die Ausgabe von ls zu analysieren . Ein besserer Weg, um zu tun, was Sie wollen, ist
stat -c "%n %y"*| grep 2013-0[678]
Alternativ können Sie nur das letzte Feld aktivieren, um sich vor dem unwahrscheinlichen Fall zu schützen, dass der Dateiname selbst ein Datum ist:
stat -c "%n %y"*| awk '$NF ~ /2013-0[678]/'
Von man stat:
-c --format=FORMAT
use the specified FORMAT instead of the default; output a new‐
line after each useof FORMAT
%y time oflast modification, human-readable
%n file name
Es ist auch ein gutes Beispiel. Ich habe STAT noch nie überprüft. danke für tolle Infos
OmiPenguin
Wechseln Sie möglicherweise zu ..., | awk '$NF ~ /2013-0[678]/'um nur das letzte Ausgabefeld zu überprüfen, in dem (unwahrscheinlich?) Sogar, dass der Name einer Datei mit dem regulären Ausdruck übereinstimmt, auch wenn das Datum nicht übereinstimmt.
Tripleee
3
lsist ein Befehl zum Anzeigen von Informationen zu Dateien, die von Menschen gelesen werden können. Verwenden Sie es nicht in Skripten .
Der Befehl zum Suchen von Dateien in einem Verzeichnisbaum, der bestimmten Kriterien entspricht, lautet find. Wenn Sie GNU find (dh nicht eingebettetes Linux oder Cygwin) oder FreeBSD find (dh FreeBSD oder OSX) haben, können Sie -newermtDateien abgleichen, die zuletzt nach einem bestimmten Datum geändert wurden.
Fügen Sie ein Jahr hinzu, wenn Sie Dateien in einem bestimmten Jahr abgleichen möchten, und nicht das Kalenderjahr, in dem das Skript ausgeführt wird.
Wenn Ihre Find-Implementierung nicht vorhanden ist -newermt, müssen Sie damit auskommen -newer, wodurch das Datum der gefundenen Datei findmit einer festen Datei verglichen wird . Verwenden Sie touchdiese Option, um temporäre Dateien mit dem Datum zu erstellen, das Sie als Begrenzung verwenden möchten.
[...]
stimmt das Konstrukt mit einem einzelnen Zeichen überein, bei dem es sich um eines der Zeichen in Klammern handeln kann. Ihr Ausdruck stimmt also mitJJA
oderJug
(J
von[Jun]
,u
von[Jul]
undg
von[Aug]
) überein, aber nicht mit den Monatsabkürzungen, auf die Sie gehofft haben.Antworten:
Sie können mehrere Muster wie folgt abgleichen:
Dies gibt alle Übereinstimmungen für Juni, Juli oder August zurück. Sie benötigen die
print
Anweisung nicht, da dies dieawk
Standardaktion ist.quelle
awk '/Jun|Jul|Aug/'
or schreiben könnenawk '/Ju[nl]|Aug/'
In der Regel ist es eine sehr schlechte Idee, die Ausgabe von ls zu analysieren . Ein besserer Weg, um zu tun, was Sie wollen, ist
Alternativ können Sie nur das letzte Feld aktivieren, um sich vor dem unwahrscheinlichen Fall zu schützen, dass der Dateiname selbst ein Datum ist:
Von
man stat
:quelle
| awk '$NF ~ /2013-0[678]/'
um nur das letzte Ausgabefeld zu überprüfen, in dem (unwahrscheinlich?) Sogar, dass der Name einer Datei mit dem regulären Ausdruck übereinstimmt, auch wenn das Datum nicht übereinstimmt.ls
ist ein Befehl zum Anzeigen von Informationen zu Dateien, die von Menschen gelesen werden können. Verwenden Sie es nicht in Skripten .Der Befehl zum Suchen von Dateien in einem Verzeichnisbaum, der bestimmten Kriterien entspricht, lautet
find
. Wenn Sie GNU find (dh nicht eingebettetes Linux oder Cygwin) oder FreeBSD find (dh FreeBSD oder OSX) haben, können Sie-newermt
Dateien abgleichen, die zuletzt nach einem bestimmten Datum geändert wurden.Fügen Sie ein Jahr hinzu, wenn Sie Dateien in einem bestimmten Jahr abgleichen möchten, und nicht das Kalenderjahr, in dem das Skript ausgeführt wird.
Wenn Ihre Find-Implementierung nicht vorhanden ist
-newermt
, müssen Sie damit auskommen-newer
, wodurch das Datum der gefundenen Dateifind
mit einer festen Datei verglichen wird . Verwenden Sietouch
diese Option, um temporäre Dateien mit dem Datum zu erstellen, das Sie als Begrenzung verwenden möchten.quelle