Я пытаюсь заменить серию символов звездочки в текстовом файле -999.9 с помощью sed. Однако я не могу понять, как правильно избежать символа подстановки.Sed заменяет символы звездочки
например.
$ echo "2006.0,1.0,************,-5.0" | sed 's/************/-999.9/g'
sed: 1: "s/************/-999.9/g": RE error: repetition-operator operand invalid
Не работает. И
$ echo "2006.0,1.0,************,-5.0" | sed 's/[************]/-999.9/g'
2006.0,1.0,-999.9-999.9-999.9-999.9-999.9-999.9-999.9-999.9-999.9-999.9-999.9-999.9,-5.0
ставит -999,9 для каждого *, что не то, что я намеревался.
Спасибо!
Я удивлен, что первая команда не вводит тонну '-999.9' 'с' \ ** 'означает ** ноль ** или более вхождения' * '. Выход 'echo '2006.0,1.0, ************, - 5.0" | sed 's/\ **/999.9/g'' is '999.92999.90999.90999.96999.9.999.90999.9,999.91999.9.999.90999.9,999.9,999.9-999.95999.9.999.90999.9' Я ожидал, что вам понадобится' \ * \ ** 'для ** одного ** или более, например' \ * + ', в оболочке так же, как вы делаете в sed и других инструментах, но ясно, что вы этого не делаете и idk почему! –
На самом деле '\ **' даже не является регулярным выражением, это шаблон glob, соответствующий буквенному '*', за которым следует что-то, и поэтому у меня есть ',' в конце концов, чтобы остановить это. – anubhava
Ах, гвоздя, конечно. Еще одна подсказка, что оболочка не предназначена для манипулирования текстами, так как даже те вещи, которые они используют, LOOKS, например, для обработки текста, на самом деле являются чем-то совершенно другим, что имеет смысл для генерации имени файла вместо этого!Может быть, изменить первое предложение из символа '* является символом регулярного выражения' на' *, является символом подстановки, означающим повторение, которое используется в оболочке для globbing и в инструментах UNIX, таких как sed, grep, awk для регулярных выражений', а затем укажите, что находится в вашем 2 скрипта? –