не может переименовывать файлы с «[]« в имени?

Try:

sed -i.bak '/firmware_revision/ s/test/production/' myfile.py

Здесь /firmware_revision/ действует как условие. Оно истинно для строк, соответствующих regex firmware_revision, и ложно для других строк. Если условие истинно, то выполняется команда, которая следует за ним. В данном случае это команда замены, которая заменяет первое вхождение test на production.

Другими словами, команда s/test/production/ выполняется только для строк, соответствующих regex firmware_revision. Все остальные строки проходят без изменений.

По умолчанию sed посылает свой вывод в стандартный аут. Однако вы хотели изменить файл на месте. Поэтому мы добавили опцию -i. В частности, -i.bak вызывает изменение файла на месте с сохранением резервной копии с расширением .bak.

Если вы решили, что эта команда вам подходит, и вы хотите жить опасно и не создавать резервную копию, то в GNU sed (Linux) используйте:

sed -i '/firmware_revision/ s/test/production/' myfile.py

В отличие от этого, в BSD (OSX) опция -i должна иметь аргумент. Если вы не хотите сохранять резервную копию, укажите пустой аргумент. Таким образом, используйте:

sed -i '' '/firmware_revision/ s/test/production/' myfile.py

Edit

В правке к вопросу ОП просит заменить каждое вхождение test в строке на production. В этом случае мы добавляем опцию g к команде substitute для глобальной (для данной строки) замены:

sed -i.bak '/firmware_revision/ s/test/production/g' myfile.py
5
16.04.2015, 16:08
0 ответов

Теги

Похожие вопросы