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
В правке к вопросу ОП просит заменить каждое вхождение test
в строке на production
. В этом случае мы добавляем опцию g
к команде substitute для глобальной (для данной строки) замены:
sed -i.bak '/firmware_revision/ s/test/production/g' myfile.py