Не прибегая к причудливому регулярному выражению с подсчетом запятых, для этой проблемы лучше использовать awk
.
awk -F, '$2=="ST"'
-F,
указывает разделитель, который устанавливается в виде запятой для ваших данных. $ 2
относится ко второму столбцу, который вы хотите сопоставить. «ST»
- это значение, которое вы хотите сопоставить. Вы можете использовать следующую "команду" для получения желаемого результата:
for i in {1..7}; do mkdir /tmp/$(date +"%A" --date "$i days ago"); done
С zsh
:
zmodload zsh/langinfo # if not already loaded
mkdir /tmp/${(v)^langinfo[(I)DAY_*]}
Это использует имена дней в вашей локали. Как отдельная команда:
zsh -c 'zmodload zsh/langinfo && mkdir /tmp/${(v)^langinfo[(I)DAY_*]}'
$langinfo
- это специальный ассоциативный массив, который раскрывает некоторые настройки локали, включая имена дней. $langinfo[(I)DAY_*]
выведет ключи этого массива, соответствующие DAY_*
(то есть DAY_1
, DAY_2
...). С помощью флага расширения параметров (v)
мы расширяем значения для этих ключей. ^
распределяет эти элементы так, что получается /tmp/value1
, /tmp/value2
...
В любой POSIX-подобной оболочке вы также можете сделать:
(cd /tmp && IFS=';' && set -o noglob && mkdir $(locale day))
locale day
возвращает ;
-разделенный список имен дней в текущей локали. Мы используем для него оператор split+glob (оставляем без кавычек подстановку команды $(...)
), отключив часть glob (set -o noglob
) и настроив часть split на разделение по ;
(IFS=';'
).
Вы можете использовать расширение скобок:
mkdir -p /tmp/{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}
Вышеупомянутое эквивалентно этому (которое также является единственной командой):
mkdir -p /tmp/Sunday /tmp/Monday /tmp/Tuesday /tmp/Wednesday /tmp/Thursday /tmp/Friday /tmp/Saturday