Я пытаюсь извлечь дату, изменил/изменил на прошлой неделе файлы и папки с sed
но я борюсь. Вот мое мнение
ls -l | sed '/codehere//g'
но я понятия не имею, как эта фильтрация может быть сделана, кроме с awk
.
Вывод моего ls -l
команда:
vladimir@vladimir-K54L ~/Desktop $ ls -l
total 140
-rw-r--r-- 1 vladimir vladimir 516 Feb 27 19:33 4taOS.zip
-rw-r--r-- 1 vladimir vladimir 63092 Feb 18 18:14 angela.jpg
-rw-r--r-- 1 vladimir vladimir 0 Mar 4 00:23 _cmd.txt
-rw-r--r-- 1 vladimir vladimir 5 Feb 27 19:26 dat1.txt
-rw-r--r-- 1 vladimir vladimir 5 Feb 27 19:26 dat2.txt
-rw-r--r-- 1 vladimir vladimir 5 Feb 27 19:26 dat3.txt
-rw-r--r-- 1 vladimir vladimir 5 Feb 27 19:26 dat4.txt
-rw-r--r-- 1 vladimir vladimir 5 Feb 27 19:26 dat5.txt
-rw-r--r-- 1 vladimir vladimir 5 Feb 27 19:26 dat6.txt
-rw-r--r-- 1 vladimir vladimir 226 Feb 24 13:21 java.html
-rwxr-xr-x 1 vladimir vladimir 299 Feb 27 19:27 lab1.sh
-rwxr-xr-x 1 vladimir vladimir 615 Mar 5 00:36 labperl2.plx
-rw-r--r-- 1 vladimir vladimir 18 Mar 3 12:44 naredbi.txt
-rwxr-xr-x 1 vladimir vladimir 1105 Mar 3 12:51 OSPRVKOL2015.plx
-rwxr-xr-x 1 vladimir vladimir 187 Feb 27 19:13 perl.plx
-rw-r--r-- 1 vladimir vladimir 257 Feb 23 21:44 primer
-rwxr-xr-x 1 vladimir vladimir 136 Feb 23 21:55 prva.sh
-rwxr-xr-x 1 vladimir vladimir 44 Feb 23 21:56 treta.sh
-rw-r--r-- 1 vladimir vladimir 137 Mar 4 23:17 vlade.txt
-rw-r--r-- 1 vladimir vladimir 67 Mar 3 12:44 vlez.txt
-rwxrwxrwx 1 vladimir vladimir 110 Feb 23 21:52 vtora.sh
Таким образом, я только должен распечатать имена файлов, пример vtora.sh
в зависимости от измененных дат (только в течение прошлой недели).
В первую очередь, Вы действительно не хотите делать это. парсинг вывода ls
очень подвержено ошибкам и существуют намного лучшие способы достигнуть того, что Вы хотите (find
, например). Однако я подозреваю, что Ваш учитель хочет сделать, чтобы Вы изучили регулярные выражения, и просто использует это в качестве примера. Я, конечно, надеюсь так, так или иначе.
В любом случае это будет работать над выводом, который Вы показали по своему вопросу и в течение этой недели. Это перестанет работать на следующей неделе, и это перестанет работать, если Ваши имена файлов будут иметь пробелы или другую странность на их имена. Это перестанет работать для любых других дат, чем прошлая неделя конкретно. Тем не менее это действительно работает над Вашим примером:
$ ls -l | sed -En ' s/.*Feb *2[6-8].* (.*)/\1/p; s/.*Mar *[1-4].* (.*)/\1/p; '
4taOS.zip
_cmd.txt
dat1.txt
dat2.txt
dat3.txt
dat4.txt
dat5.txt
dat6.txt
lab1.sh
naredbi.txt
OSPRVKOL2015.plx
perl.plx
vlade.txt
vlez.txt
Я использую -E
который активирует расширенные регулярные выражения (без этого, я должен был бы выйти (
и )
) и -n
что означает, "не печатают, если я не говорю Вам". Затем оператор замены isl ooking для строк, соответствующих также Feb 2
и любое число между 6 и 8 (прошлые недельные дни в феврале) или Mar
и любое число от 1-4 (даты прошлой недели в марте). Если те строки соответствуют, это заменяет все на строке с последней строкой не пробелы. Это - то, что делают круглые скобки: они "получают" шаблон, таким образом, он может использоваться на правой стороне замены.
ответ terdon предоставляет решение, подходящее для требований преподавателя. Я хотел бы предоставить решение, которое является надлежащим. В то время как это, конечно, хорошо и прилежно для следования инструкциям в классе, теория и практика часто отличаются, и что преподаватели преподают/требуют в курсе, иногда не делается профессионально, где Вы не хотите вопиться в менеджером/клиентом.
надлежащий подход должен быть:
$ find . -maxdepth 1 -type f -mtime -7
способ, которым это работает, прост:
find
команда, которая рекурсивно пересекает дерево каталогов. В этом случае мы используем GNU find
на Ubuntu. .
может быть не учтен и автоматически предположен. На другой ОС find
(если я вспоминаю правильно, BSD find
) мог бы потребовать такой опции. -maxdepth 1
ограничивает нас только списком файлов в текущем каталоге. -type f
ограничит вывод файлами только. -mtime -7
отфильтрует файлы со временем изменения -7
дни, т.е. неделя.