Большинство из нас установило переменную ПУТИ. Это покажет Вам, как автоматически заставить путь поиска человека соответствовать Вашему пути поиска команды.
Скажите добавление пути для включения персональных, определенных для работы и локально установленных утилит, как export PATH=$PATH:~/bin:/workgroup/bin:/opt/local/bin:
. Как побочный эффект, man foo
не покажет страницы справочника, сохраненные в ~ / человек,/workgroup/man или/opt/local/man.
Для разрешения этого я использую manpath
управляйте для автоматической установки пути поиска страницы справочника. Например, мой ~/.bashrc имеет следующее. Это работает на меня в ста различных системах, выполняющих все из FreeBSD 4.x, Darwin и CentOS 5:
### PATH & MANPATH
# My personal utilities
export PATH=$PATH:$HOME/bin
### Set the manpath based on the PATH, after man(1) parses man.conf
# - No need to modify man.conf or manually modify MANPATH_MAP
# - Works on Linux, FreeBSD & Darwin, unlike /etc/manpaths.d/
# See "SEARCH PATH FOR MANUAL PAGES" in man(1)
# Just set the man search path. Don't print output to screeen.
manpath >/dev/null
Некоторые системы (Как Leopard Apple) устанавливают MANPATH автоматически, но это означает, что Ваша система будет использовать переменную MANPATH вместо использования manpath
. В результате страницы справочника для 'MacPorts' (/opt/local/man) проигнорированы. Я хочу управлять этим сам, таким образом, я сбросил MANPATH:
unset MANPATH
manpath >/dev/null
Если Вы используете что-нибудь кроме C
локаль, Вы не должны использовать диапазоны как [a-z]
так как они зависимы от локали и не всегда дают результаты, которые Вы ожидали бы. А также случай выходит, Вы уже встретились, некоторые локали рассматривают символы с диакритическими знаками (например, á) то же как основной символ (т.е. a).
Вместо этого используйте именованный класс символов:
echo B | grep '[[:lower:]]'
Это будет всегда давать корректный результат для локали. Однако необходимо выбрать локаль для отражения значения и входного текста и теста, который Вы пытаетесь применить.
Например, если необходимо найти конкретное значение байта, используйте C
локаль, которая всегда доступна:
echo B | LANG=C grep '[a-z]'
Если это не работает как ожидалось, это действительно - ошибка.
Диапазоны в регулярных выражениях должны наблюдать установку сопоставления. Вот соответствующий стандарт: http://pubs.opengroup.org/onlinepubs/007908799/xbd/re.html (ищут "выражения диапазона"). Так echo B | LC_COLLATE=en_US grep '[a-z]'
должен произвести B
учитывая разумное определение соответствующей локали. Я не могу объяснить, почему это иногда не работает на Вас, но я был бы очень удивлен, встретился ли я с этим в недревней системе, которая правильно установлена и настроена.
echo B | LC_COLLATE=en_US.utf8 grep '[a-z]'
Ничего не печатает на Ubuntu 12.04 с grep 2.10. Ничего не печатает на Centos 6.5 с grep 2.6.3. Действительно работает над Debian 6.0.8 с grep 2.6.3.
– Ian D. Allen
27.01.2014, 08:20
locale -k
к моему вопросу; это идентично на двух машинах Debian, та гдеB
находится в диапазоне и том, где это не. BTW я не корень ни на одной машине (таким образом, это не что-то специфическое, что я делаю как администратор). – Gilles 'SO- stop being evil' 04.07.2011, 22:46echo "Baü" | LC_COLLATE=C grep -o '[[:lower:]]'
возвратыa
Иü
в то время какecho "Baü" | LC_COLLATE=C grep -o '[a-z]'
возвраты толькоa
. В моих глазах, "ниже" не действительно, что OP хотел – Daniel Alder 24.01.2018, 14:47C
локаль. Я полагаю, что это относится к OP, кто надеялся сообщать об ошибке. Если Вы не находитесь вC
локаль, результаты использования диапазонов очень непредсказуемы и поэтому никогда не могут считаться ошибкой. С другой стороны, если необходимо найти конкретное значение байта, просто используйтеC
локаль. Моя вторичная точка была то, что, если Вы действительно хотите искать строчные буквы в локали, используйте класс символов. Даже при том, что OP не мог искать это, другие могли бы, если они находят этот вопрос. дополнительная функция – Neil Mayhew 14.02.2018, 19:54