Форум — Admin Шаблон с исключением? Или как? bash, script, шаблон 0 1 Приветствую.Результат команды может быть: 21 ФАЙЛ Но может быть: 11 ФАЙЛОВ То есть просто шаблон: *1 не подойдет. Как правильно исключить 21 из *1? Ссылка
[^2]1В man bash ищи Pattern Matching. deadNightTiger ★★★★★ (07.10.2018 08:45:29 +00:00) Показать ответы Ссылка
Ответ на: комментарий от deadNightTiger 07.10.2018 08:45:29 +00:00 На самом деле не всё так просто. Там надо исключать одиннадцать, а не двадцать один, ибо дальше — больше.1..∞1 — файл, но не 11; [2-4]..∞[2-4] — файла, но не 12; *..∞* — файлов. r3lgar ★★★★★ (07.10.2018 09:35:10 +00:00) Последнее исправление: r3lgar 07.10.2018 09:35:26 +00:00 (всего исправлений: 1) Показать ответ Ссылка
Ответ на: комментарий от r3lgar 07.10.2018 09:35:10 +00:00 *11-*19 файлов, *1 файл, *2-*4 файла, * файлов. Матчить по порядку, прекращать при сработке. Провернуть это в баше будет та еще затея. Алсо, не парь мозги и пиши просто «файл(-ов)». Как правильно исключить 21 из *1?echo 21 | grep -v '21$' echo $? anonymous (07.10.2018 11:59:52 +00:00) Показать ответы Ссылка
Ответ на: комментарий от anonymous 07.10.2018 11:59:52 +00:00 Алсо -> Алсо, тс anonymous (07.10.2018 12:01:37 +00:00) Ссылка
Ответ на: комментарий от anonymous 07.10.2018 11:59:52 +00:00 Алсо, не парь мозги и пиши просто «файл(-ов)».Я вообще обычно пишу "files: %d" и не напрягаюсь, но ТС хочет.Провернуть это в баше будет та еще затея.Это проблема ТСа, не моя. (% r3lgar ★★★★★ (07.10.2018 12:39:13 +00:00) Ссылка
Ответ на: комментарий от deadNightTiger 07.10.2018 08:45:29 +00:00 [^2]1Помогло разобраться, спасибо. На самом деле не всё так просто. Там надо исключать одиннадцать, а не двадцать один, ибо дальше — большеДа, так и есть. Решил через переменные в условиях, всем спасибо. mexx ★ (07.10.2018 16:44:29 +00:00) автор топика Ссылка
Ответ на: комментарий от anonymous 07.10.2018 11:59:52 +00:00 Алсо, не парь мозги и пиши просто «файл(-ов)»Всё у вас в этих ваших интернетах абы как ))) mexx ★ (07.10.2018 17:29:13 +00:00) автор топика Ссылка
case 11|12|17) echo сперва фильтруем исключение из правил ;; ... *1|*4) echo или говорим, что "исключение подтверждает правило" ;; esac anonymous (07.10.2018 18:01:40 +00:00) Показать ответ Ссылка
Или как man ngettext ngettext nautilus 'Extract %d file' 'Extract %d files' $NUMBER | sed -e "s/.*%d/$NUMBER/" DonkeyHot ★★★★★ (08.10.2018 05:42:56 +00:00) Ссылка
Ответ на: комментарий от anonymous 07.10.2018 18:01:40 +00:00 Да, с case стало еще оптимальнее, спасибо.case $COM in 1|*[!1]1) echo "ФАЙЛ" ;; [2-4]|*[!1][2-4]) echo "ФАЙЛА" ;; *) echo "ФАЙЛОВ" ;; esac mexx ★ (08.10.2018 10:37:56 +00:00) автор топика Показать ответ Ссылка
Ответ на: комментарий от mexx 08.10.2018 10:37:56 +00:00 Интересно сравнить по скорости с: case "0$1" in *[^1]1) echo файл;; *[^1][2-4]) echo файла;; *) echo файлов;; esac (что оптимальнее — я не знаю) :) vodz ★★★★★ (08.10.2018 20:17:39 +00:00) Показать ответы Ссылка
Ответ на: комментарий от vodz 08.10.2018 20:17:39 +00:00 В данном случае скорость не имеет значения. Совсем.Однако:*[^1]1) echo файл;; *[^1][2-4]) echo файла;; *) echo файлов;; - неверно обработает 1 ФАЙЛ, 2 ФАЙЛА, 3 ФАЙЛА и 4 ФАЙЛА - напишет ФАЙЛОВ. Или о чем вопрос? mexx ★ (09.10.2018 17:43:18 +00:00) автор топика Показать ответы Ссылка
Ответ на: комментарий от mexx 09.10.2018 17:43:18 +00:00 Или о чем вопрос?Внимательнее посмотрите на первую строку моего решения. vodz ★★★★★ (09.10.2018 17:45:19 +00:00) Показать ответы Ссылка
Ответ на: комментарий от vodz 09.10.2018 17:45:19 +00:00 Внимательнее посмотрите на первую строку моего решения.Не понимаю.Результат моей команды = число.Смысл в: "0$1" какой?На выходе число 3. Оно будет обработано НЕ верно.Я не спорю, просто НЕ понимаю. Буду признателен за пояснение. mexx ★ (10.10.2018 16:31:09 +00:00) автор топика Показать ответ Ссылка
Ответ на: комментарий от mexx 10.10.2018 16:31:09 +00:00 Число 3 превращается в 03 и обрабатывается верно. legolegs ★★★★★ (10.10.2018 19:11:41 +00:00) Показать ответ Ссылка
Ответ на: комментарий от legolegs 10.10.2018 19:11:41 +00:00 Про 'превращается' понятно. Но в обработку оно поступает именно как '03' и обрабатывается неправильно, то есть как '3 ФАЙЛОВ'. mexx ★ (10.10.2018 20:56:04 +00:00) автор топика Показать ответ Ссылка
Ответ на: комментарий от mexx 10.10.2018 20:56:04 +00:00 Запусти да проверь. Срабатывает вторая ветка case. legolegs ★★★★★ (10.10.2018 21:31:14 +00:00) Ссылка
Ответ на: комментарий от vodz 09.10.2018 17:45:19 +00:00 Внимательнее посмотрите на первую строку моего решенияДа, всё правильно, интересно, спасибо. Запусти да проверьС этого и начал, но ошибся в проверочной команде, бывает. mexx ★ (11.10.2018 05:49:32 +00:00) автор топика Ссылка
Ответ на: комментарий от mexx 09.10.2018 17:43:18 +00:00 В данном случае скорость не имеет значения.Я люблю извращения. Вот, например, [2-4] и [234]. Второе, мне кажется, оптимальнее. vodz ★★★★★ (11.10.2018 08:06:08 +00:00) Ссылка
Ответ на: комментарий от vodz 08.10.2018 20:17:39 +00:00 (что оптимальнее — я не знаю) :)С помощью 'date +%s%6N' вот так:=== Вариант 'mexx' для "500" файлов === 820 796 775 774 769 753 745 736 728 723 === Вариант 'vodz' для "500" файлов === 772 762 756 754 753 745 742 739 719 713 Вот, например, [2-4] и [234]. Второе, мне кажется, оптимальнее=== Вариант 'vodz' для "3" файлов с '[234]' === 735 720 682 677 672 658 658 641 620 602 === Вариант 'vodz' для "3" файлов с '[2-4]' === 779 769 756 754 746 741 735 726 714 695 mexx ★ (11.10.2018 17:16:40 +00:00) автор топика Показать ответ Ссылка
Ответ на: комментарий от mexx 11.10.2018 17:16:40 +00:00 Ну это не серьёзно. Есть же встроенная в bash «time» vodz ★★★★★ (12.10.2018 07:13:45 +00:00) Последнее исправление: vodz 12.10.2018 07:13:54 +00:00 (всего исправлений: 1) Показать ответ Ссылка
Ответ на: комментарий от vodz 12.10.2018 07:13:45 +00:00 То, что уже было под рукой ) mexx ★ (12.10.2018 09:49:56 +00:00) автор топика Ссылка