Даты списка файлов с sed

Я пытаюсь извлечь дату, изменил/изменил на прошлой неделе файлы и папки с 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 в зависимости от измененных дат (только в течение прошлой недели).

4
задан 5 March 2017 в 03:20

2 ответа

В первую очередь, Вы действительно не хотите делать это. парсинг вывода 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 (даты прошлой недели в марте). Если те строки соответствуют, это заменяет все на строке с последней строкой не пробелы. Это - то, что делают круглые скобки: они "получают" шаблон, таким образом, он может использоваться на правой стороне замены.

3
ответ дан 1 December 2019 в 09:20

ответ terdon предоставляет решение, подходящее для требований преподавателя. Я хотел бы предоставить решение, которое является надлежащим. В то время как это, конечно, хорошо и прилежно для следования инструкциям в классе, теория и практика часто отличаются, и что преподаватели преподают/требуют в курсе, иногда не делается профессионально, где Вы не хотите вопиться в менеджером/клиентом.

надлежащий подход должен быть:

$ find . -maxdepth 1  -type f -mtime -7

способ, которым это работает, прост:

  • find команда, которая рекурсивно пересекает дерево каталогов. В этом случае мы используем GNU find на Ubuntu.
  • следующим аргументом является местоположение - родительский каталог, который мы хотим пересечь. В этом случае . может быть не учтен и автоматически предположен. На другой ОС find (если я вспоминаю правильно, BSD find) мог бы потребовать такой опции.
  • -maxdepth 1 ограничивает нас только списком файлов в текущем каталоге.
  • -type f ограничит вывод файлами только.
  • -mtime -7 отфильтрует файлы со временем изменения -7 дни, т.е. неделя.
3
ответ дан 1 December 2019 в 09:20

Другие вопросы по тегам:

Похожие вопросы: