Различие в обработке регулярного выражения между Perl, Kikki и Kodos

Эта команда выбирает каждого путь и усекает его к n папки глубоко (определенный в \{0,n\} раздел sed команда и {0,n} раздел команды grep). Это затем передается по каналу в uniq отфильтровывать дубликаты.

rsync -nPaAXz src_dir dst_dir | sed -n 's@^\(\([^/][^/]*/\)\{0,2\}\).*@\1@p' | uniq

То же самое может также быть достигнуто с помощью grep:

rsync -nPaAXz src_dir dst_dir | grep -oE "^([^/]+/){0,2}"

Хотя вышеупомянутая работа привычки с GNU grep версии < 2.5.3 из-за ошибки.

0
20.02.2013, 00:38
2 ответа

Так как Вы не предоставили свой код Python (или независимо от того, что Kiki и Kodos), затем, может быть трудно сказать наверняка, но мое предположение - то, что синтаксис шаблона для Kiki и Kodos отличается от Perl в этом, Вам не нужны разделители наклонной черты вправо. Например, эквивалент в Python был бы:

import re
m = re.search('(\d+)', "[2004/04/13] The date of this article.")
print m.group(0)

Заметьте, что шаблон не включает наклонные черты вправо.

1
28.01.2020, 02:53
  • 1
    Вы абсолютно правы.Спасибо. (kiki и kodos графический интерфейсы пользователя Отладчика RegEx). –  chris 13.05.2012, 01:41

В Perl важно понять, что regex оператор не m, это - двойные наклонные черты - /..../ (где .... на самом деле Ваше регулярное выражение). m является дополнительным, если Вы используете /.

Следующее является всем эквивалентом:

$mystring =~ m/(\d+)/;

$mystring =~ /(\d+)/;

$var = '(\d+)';
$mystring =~ /$var/;
0
28.01.2020, 02:53
  • 1
    Технически это m// это - оператор, но m является дополнительным при некоторых обстоятельствах. –  Mat 13.05.2012, 16:24

Теги

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