У меня есть регулярное выражение, которое дает мне один результат в sed, но другой в Perl (и Ruby).
У меня есть строка one;two;;three, и я хочу выделить подстроки, разделенные символом ;. Поэтому в Perl я делаю следующее:
$a = "one;two;;three";
$a =~ s/([^;]*)/[\1]/g;
print $a;
(Или в Ruby: print "one;two;;three".gsub(/([^;]*)/, "[\\1]").)
Результат:
[one][];[two][];[];[three][]
(Я знаю причину ложных пустых подстрок.)
Любопытно, что когда я запускаю одно и то же регулярное выражение в sed, получается другой результат. Я запустил:
echo "one;two;;three" | sed -e 's/[^;]*/[\0]/g'
и я получаю:
[one];[two];[];[three]
В чем причина этого другого результата?
EDIT:
Кто-то ответил "потому что sed не perl". Я знаю это. Причина, по которой я задаю свой вопрос, заключается в том, что я не понимаю, насколько sed справляется с нулевыми совпадениями.