Это потому что Ваш root
у пользователя есть другой путь.
sudo echo $PATH
печатает Ваш путь. Именно Ваша оболочка делает переменное расширение, прежде sudo
запускается (и передает его как параметр командной строки, расширенный).
Попытка:
sudo sh -c 'echo $PATH'
sed
ожидает основное регулярное выражение (BRE). \s
не стандартная специальная конструкция в BRE (ни в ДО, в этом отношении), это - расширение некоторых языков, в особенности Perl (какие многие другие подражают). В sed, в зависимости от реализации, \s
любой стенды для литеральной строки \s
или для буквенного символа s
.
В Вашей реализации это появляется это \s
соответствия s
, так \s*
соответствия 0 или больше s
, и x\s*
соответствия x
в Вашем демонстрационном входе, следовательно x ax
преобразовывается к x ax
(и xy
был бы преобразован к x y
и так далее). В других реализациях (например, с GNU sed), \s
соответствия \s
, так \s*
соответствует обратной косой черте, сопровождаемой 0 или больше s
, который не происходит в Вашем входе, таким образом, строка неизменна.
Это абсолютно не имеет никакого отношения к жадности. Жадность не влияет, соответствует ли строка regex, только какая часть строки получена соответствием.
Я думаю, что Вы получаете свой sed и перепутанные флаги grep.-E является флагом grep для расширенных регулярных выражений.-r является флагом sed для расширенных регулярных выражений. Следующие работы для меня:
echo "x ax" | sed -r 's/x\s*/x /'
Это производит
x ax
sed
страницы справочника смотрят довольно другое право о теперь. -r
не допустимый флаг в этой системе. Я должен перегруппировать и выяснить то, что произошло.
– Tim
06.02.2013, 02:15
sed
Я использую. То, что поражает, однако, является использованием допустимого флага-E
в этой системе для включения ДО я также не могу успешно использовать[:space:]
, который мойman re_format
говорит приемлемо. Только литерал '' работает здесь. – Tim 06.02.2013, 02:34x[[:space:]]
и нетx[:space:]
? А-ч – Gilles 'SO- stop being evil' 06.02.2013, 02:45