2013-05-20 3 views
1

Я попробовал небольшой тест: заменить x в x|y|z|a с w так я пробовал:Perl присоединиться и разделить операции

echo "x|y|z|a" | perl -lne '@arr=split /|/;$arr[0]='w';$_=join "|",@arr;print $_;' 

он дал мне:

> echo "x|y|z|a" | perl -lne '@arr=split /|/;$arr[0]='w';$_=join "|",@arr;print $_;' 
w|||y|||z|||a 
> 

удивительно это дало 3 поля разделители вместо одного. может кто-нибудь сказать мне, где я ошибаюсь?

+0

'' w'' должно быть, должно быть '' w '' – TLP

+0

Должны ли мы предположить, что вы * не * ищете ответы типа' tr /// ',' s /// ', lvalue-able' substr ($ _, 0, 1) 'и т. Д.? ;-) – pilcrow

+0

Нет, я не люблю их! – Vijay

ответ

7

Ваше регулярное выражение представляет собой чередование двух пустых шаблонов. Вы можете использовать /\|/ для соответствия буквальному |.

+5

В частности, '|' является специальным символом, который означает «или», поэтому '/ | /' означает «Сопоставление по пустой строке или пустой строке». Это будет соответствовать каждый раз. –

+0

Спасибо Hasturkun. – Vijay

Смежные вопросы