Для записи, [...]конструкция соответствует одному символу, который может быть любым из символов в скобках. Таким образом, ваше выражение соответствует JJA или Jug( Jот [Jun], uот [Jul]и gот [Aug]), но не к аббревиатурам месяца, которые вы надеялись найти.
tripleee
Ответы:
12
Вы можете сопоставить несколько шаблонов следующим образом:
awk '/Jun/ || /July/ || /Aug/'<(ls -lrh)
Это возвращает все совпадения за июнь, июль или август. Вы не требуете printинструкции, так как это awkдействие по умолчанию.
awk понимает расширенные регулярные выражения, поэтому для такого простого шаблона вы могли бы написать его как awk '/Jun|Jul|Aug/'илиawk '/Ju[nl]|Aug/'
cas
5
Как правило, разбирать вывод команды ls очень плохая идея . Лучший способ сделать то, что вы хотите, это
stat -c "%n %y"*| grep 2013-0[678]
В качестве альтернативы, отметьте только последнее поле для защиты от маловероятного случая, когда само имя файла является датой:
stat -c "%n %y"*| awk '$NF ~ /2013-0[678]/'
От man stat:
-c --format=FORMATuse the specified FORMAT instead of the default; output a new‐
line after each useof FORMAT%y time oflast modification, human-readable%n file name
Это также хороший пример. Я никогда не проверял STAT раньше. спасибо за отличную информацию
OmiPenguin
Возможно, измените на ..., | awk '$NF ~ /2013-0[678]/'чтобы проверить только последнее поле вывода, в (маловероятном?), Даже если имя файла соответствует регулярному выражению, даже если дата не совпадает.
Команда для поиска файлов в дереве каталогов соответствия определенным критериям find. Если у вас есть GNU find (то есть не встроенный Linux или Cygwin) или FreeBSD find (то есть FreeBSD или OSX), вы можете использовать -newermtдля сопоставления файлы, которые были последний раз изменены после определенной даты.
Добавьте год, если вы хотите сопоставить файлы в определенном году, а не календарный год, когда выполняется скрипт.
Если ваша реализация find не имеет -newermt, вам придется обойтись -newer, которая сравнивает дату findнайденного файла с фиксированным файлом. используйте touchдля создания временных файлов с датой, которую вы хотите использовать в качестве границы.
[...]
конструкция соответствует одному символу, который может быть любым из символов в скобках. Таким образом, ваше выражение соответствуетJJA
илиJug
(J
от[Jun]
,u
от[Jul]
иg
от[Aug]
), но не к аббревиатурам месяца, которые вы надеялись найти.Ответы:
Вы можете сопоставить несколько шаблонов следующим образом:
Это возвращает все совпадения за июнь, июль или август. Вы не требуете
print
инструкции, так как этоawk
действие по умолчанию.источник
awk '/Jun|Jul|Aug/'
илиawk '/Ju[nl]|Aug/'
Как правило, разбирать вывод команды ls очень плохая идея . Лучший способ сделать то, что вы хотите, это
В качестве альтернативы, отметьте только последнее поле для защиты от маловероятного случая, когда само имя файла является датой:
От
man stat
:источник
| awk '$NF ~ /2013-0[678]/'
чтобы проверить только последнее поле вывода, в (маловероятном?), Даже если имя файла соответствует регулярному выражению, даже если дата не совпадает.ls
команда для отображения информации о файлах в удобочитаемой форме Не используйте его в сценариях .Команда для поиска файлов в дереве каталогов соответствия определенным критериям
find
. Если у вас есть GNU find (то есть не встроенный Linux или Cygwin) или FreeBSD find (то есть FreeBSD или OSX), вы можете использовать-newermt
для сопоставления файлы, которые были последний раз изменены после определенной даты.Добавьте год, если вы хотите сопоставить файлы в определенном году, а не календарный год, когда выполняется скрипт.
Если ваша реализация find не имеет
-newermt
, вам придется обойтись-newer
, которая сравнивает датуfind
найденного файла с фиксированным файлом. используйтеtouch
для создания временных файлов с датой, которую вы хотите использовать в качестве границы.источник