Почему не может найти, что-regex соответствуют новой строке?

Попытайтесь посмотреть на этот подобный вопрос превращения Вашего файлового менеджера по умолчанию в Наутилус:

https://askubuntu.com/questions/47208/how-to-stop-thunar-being-default-file-browser

Необходимо смочь удалить Thunar полностью путем выполнения после команды:

 sudo apt-get purge thunar*

7
10.03.2014, 19:45
3 ответа
[112194] Потому что GNU find не поддерживает [112576] \n[112577] в качестве экранирующей последовательности. Регеxp [112578]\n[112579] соответствует символу [112580]n[112581]. GNU находит копии традиционного синтаксиса Emacs, который тоже не имеет этой возможности¹.

Хотя GNU считает, что поддерживает другой синтаксис регресса, ни один из них не поддерживает обратный слэш-букву или обратный слэш-октал для обозначения управляющих символов. Вам нужно включить управляющий символ буквально в аргумент.

Вокруг много различных синтаксисов регексов. Ни POSIX [112582]основные регулярные выражения[112583] (BRE), ни [112584]расширенные регулярные выражения[112585] (ERE) не включают [112586]\n[112587] или обратные слэш-октальные эквапсы. Оба определения оставляют значение обратного слеша, когда за ним не следует специальный символ, неопределенным. Утилиты [112588]awk[112589] и [112590]sed[112591] оба поддерживают [112592]\n[112593], что означает новую строку; это специфично для этих утилит (и обыденно, но, как вы видите, не универсально).

Из скрипта оболочки можно написать

  • ¹ [112594] Довольно логично: для интерактивного использования можно набрать любой символ с помощью [113010]C-q[113011]; для использования в программировании [113012]\n[113013] существует как часть синтаксиса строкового литерала.
13
27.01.2020, 20:14
[112180]Новую строку нельзя сопоставить с [112560]'\n'[112561], так как она не имеет особого значения в регулярном выражении (например, break line), но можно сопоставить [112562]конец строки[112563] с регулярным выражением [112564]$[112565].[112181].
6
27.01.2020, 20:14
[112238] Я думаю, что поскольку [112628] находит[112629] с помощью функции [112630]fnmatch[112631] в стандартной библиотеке C, то если [112632]FNM_NOESCAPE[112633] не установлен, то символ обратного слеша в шаблоне, за которым следует любой другой символ, будет совпадать с этим вторым символом в строке.
  • Я проверяю с помощью [112634]find (GNU findutils) 4.4.2[112635] и [112636]glibc 2.15[112637], эта опция выключена. Проверьте [112638]строку 42[112639] в [112640]fnmatch. h[112641]:
  • 1
    27.01.2020, 20:14

    Теги

    Похожие вопросы