Я думаю, что главное отличие между использованием регулярного выражения состоит в том, требуют ли они соответствия всей последовательности или нет. В случае
, найти
и некоторых других команд bash вы должны соответствовать всей последовательности, в то время как в sed
, awk
, grep
и так далее вы должны соответствовать любой части последовательности. Кроме того, они похожи, но, конечно, не идентичны.
Например, при использовании регулярного выражения в операторах case
оболочки bash предполагается, что регулярное выражение описывает весь ряд. Т.е. (я использую пример здесь )
case $SERVER in
db-[0-9]+\.host\.com) echo "DB server"
;;
*)echo "Unknown server"
;;
esac
Вы можете видеть, что db- [0-9] + .host.com описывает последовательность, которая начинается с «db-», затем имеет одну или несколько цифр, а затем заканчивается на «. host.com», так что db-1.host.com будет совпадать, в то время как xdb-1.host.com не будет.
Теперь, если вы посмотрите на sed
, и написать образец поиска в аналогичном пути
echo "xdb-1.host.com"| sed -nr '/db-[0-9]+\.host\.com/p'
sed
, в отличие от case
команды, БУДЕТ напечатать строку xdb-1.host.com, потому что он может найти поиск образца INSIDE этого ряда. Итак, идея не в том, чтобы соответствовать всей последовательности, а в том, чтобы найти любое вхождение образца.
В аналогичном пути при использовании команды regexp в find
вся последовательность должна совпадать. Например,
find / -regextype sed -regex ".*\.dat"
найдет все файлы с данными расширения. Но если вы попытаетесь выполнить тот же поиск с sed
,
find / | sed -nr '/.*\.dat/'
он будет соответствовать всем файлам, которые содержат последовательность «.dat» в имени файла.
Конечно, существуют некоторые незначительные синтаксические различия. Например, если вы делаете
find / -name "*.dat"
это также своего рода регулярное выражение, где * означает «любое количество произвольных символов», но в строгом смысле regexp вы должны написать. «*,» где «.» означает любой символ, и * означает любое количество символов рода «»., так что вместе означает любое количество любых символов.
-121--217760-
Если вы просто хотите выделить скрытые файлы (и папки), и вас не волнует раскраска всех остальных файлов, то очевидный подход состоит в том, чтобы запустить ls -la | grep -E «^ |\. [^/| '.]. *»
Если вы хотите сохранить другие цвета, то все начинает усложняться, потому что $ LS _ COLORS
изначально не поддерживает раскраску скрытых файлов, как это
Я предложил динамически добавлять скрытые файлы текущего каталога к переменной среды $ LS _ COLORS
в качестве псевдо-расширения, затем выполнять ls -la
и после этого запускать dircolors
для сброса исходной цветовой схемы. Очевидно, что возникнет конфликт, если скрытый файл будет иметь то же имя, что и известное расширение. Также этот метод не работает со скрытыми папками.
Внимание! Это решение является (не очень тщательно протестированным) взломом. Используйте его на свой страх и риск.
для h в $ (ls -A | grep «^\».); делать LS_COLORS="$LS_COLORS*$h=04;05:"; готово; ls -la; eval $ (круглые цвета)
-121--42302-
Почему нет? Просто дайте относительный путь. В вашем случае,это должно быть
../../Public-A/DIR-A/aaa.php
Нет никаких «боковых» или других пределов для относительных путей.
В соответствии с этим примечанием к выпуску для версии 1.4.99.2 от 26 мая 2014 года, syncevolution предлагает базовую совместимость iCloud:
-121--105583-Теперь [...] работает с iCloud. Однако синхронизация с iCloud столкнулась с ошибкой сервера (о которой сообщается как о 17001498 «CalDAV REPORT сбрасывает данные календаря») и требует дальнейшей работы.
Если для ~/.bashrc
не задано значение PROMPT _ COMMAND
, можно запустить xfce4-terminal
как
PROMPT_COMMAND='PS1="> "; unset PROMPT_COMMAND' xfce4-terminal
-121--114384- После нескольких дней попыток выяснить это решение.
В системе была установлена старая библиотека APR (< v1.3.0), которая конфликтовала с версией, необходимой для apache. То, что я сделал, было скомпилировано (и запущено) с APR, встроенным в архив httpd-2.2.29 с использованием: ./configure --with-included-apr