2014-10-07 3 views
0

У меня есть много файлов в файле, которые я бы хотел удалить с помощью sed. Вот моя команда:Почему sed не распознает символ ?

sed -i.bak 's/\\\//g' myFile 

И я получаю следующее сообщение об ошибке:

sed: 1: "i.bak": command i expects \ followed by text. 

Не должна ли она работать. Я пробовал:

sed -i.bak 's/\\//g' myFile 

Но я получаю ту же ошибку.

спасибо.

+5

Это происходит потому, что OSX не допускает '-i.bak'. Вам нужно указать '-i 'bak''. Есть много таких вопросов, которые сейчас не могут найти. – fedorqui

+0

Возможный дубликат [Получение ошибки с выражением sed] (http://stackoverflow.com/questions/17470697/getting-an-error-with-sed-expression) – fedorqui

+0

Это может быть проблема с оболочкой, вы попробовали sed - i'.bak '? –

ответ

1

Когда вы используете sed на OS X, и если вы хотите изменить файл на месте с помощью флага -i, вам необходимо указать расширение для сохранения резервных копий этого файла.

Заканчивать man sed раздел о -i флаг:

-i extension 
     Edit files in-place, saving backups with the specified extension. If a zero-length extension is 
     given, no backup will be saved. It is not recommended to give a zero-length extension when in- 
     place editing files, as you risk corruption or partial content in situations where disk space is 
     exhausted, etc. 

Таким образом, правильная команда будет:

sed -i "bak" "s/\\\//g" myFile 

И если вы не хотите, чтобы сделать резервную копию файла, вы можете просто написать, как это:

sed -i "" "s/\\\//g" myFile 

Если вы хотите сделать свою страницу IPT зависит от платформы, вы можете проверить переменную $OSTYPE среды для этого:

if [[ "$OSTYPE" == "darwin"* ]]; then 
    sed -i "" "s/\\\//g" myFile 
else 
    sed -i "s/\\\//g" myFile 
fi 
Смежные вопросы