2013-08-02 4 views
2

Там что-то странное, когда я пишу, что:Странное поведение с SED команды

echo "VAL LES LE VAL LE VAL" | sed -E -e 's/ LES?//g' 

я получаю:

VAL LE VAL VAL 

вместо:

VAL VAL VAL 

Слово LE после LES один хранится, но последнее слово LE хорошо удалено.

Я использую патч в команду на Mac OS X 10.8, который датируется 10 мая, 2005

Кто-нибудь знает причину этого результата?

Спасибо.

ответ

2

. not recursively match output patterns. То есть, строка ввода считывается, и когда шаблон согласован, генерируется модифицированный выход и сканируется остаток входной строки. Команда «s» будет не сканировать вновь созданный вывод. Таким образом, после того, как вы замените первый LES на , вновь созданное пространство не будет сканироваться, а следующее LE не будет сопоставлено, так как нет ведущего места.

Альтернативное решение:

echo "VAL LES LE VAL LE VAL" | sed -E -e 's/ *LES?//g' 
0
echo "VAL LES LE VAL LE VAL" | sed -E -e 's/ LES?//g' 

Здесь <space>LES<space> подобраны и получил заменены <space>. поэтому следующий символ, начинающийся с LE<space>, который не соответствует sed expr <space>LES?<space> и, следовательно, не был изменен.

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