Оригинальная линия -
mongoose.connect('mongodb://localhost/Dbname', {useNewUrlParser: true, useFindAndModify: false })
Необходимо заменить -
mongoose.connect('mongodb://username:Password@host1.localhost.com:27017,host2.localhost.com:27017,host3.localhost.com:27017/DBname?authSource=admin&w=1&replicaSet=replicaname&readPreference=secondaryPreferred&retryWrites=true',{useNewUrlParser: true, useFindAndModify: false })
, пока мы пытаемся заменить эту строку через команду ниже
sed -i 's+mongodb://localhost/Dbname+mongodb://username:Password@host1.localhost.com:27017,host2.localhost.com:27017,host3.localhost.com:27017/DBname?authSource=admin\\\&w=\\\1&replicaSet=replicaname&readPreference=secondaryPreferred\\&retryWrites=true/g' app.js
, мы получаем разные вывода.
mongoose.connect('mongodb://username:Password@host1.localhost.com:27017,host2.localhost.com:27017,host3.localhost.com:27017/DBname?authSource=admin\mongodb://localhost/Dbnamew=1\mongodb://localhost/DbnamereplicaSet=replicaname\mongodb://localhost/DbnamereadPreference=secondaryPreferred\mongodb://localhost/DbnameretryWrites=true', {useNewUrlParser: true, useFindAndModify: false })
Я предоставляю два способа достижения вашей цели.
Хитрость в том, как иметь дело с &
как строка литерала ( исх , исх ).
Я предполагаю, что файл test.txt
содержит вашу базовую строку.
awk -v old="mongodb://localhost/Dbname" -v new="mongodb://username:Password@host1.localhost.com:27017,host2.localhost.com:27017,host3.localhost.com:27017/DBname?authSource=admin&w=1&replicaSet=replicaname&readPreference=secondaryPreferred&retryWrites=true" 's=index($0,old){$0=substr($0,1,s-1) new substr($0,s+length(old))} 1' test.txt
awk -v old="mongodb://localhost/Dbname" '{ gsub(old, "mongodb://username:Password@host1.localhost.com:27017,host2.localhost.com:27017,host3.localhost.com:27017/DBname?authSource=admin\\&w=1\\&replicaSet=replicaname\\&readPreference=secondaryPreferred\\&retryWrites=true") ; print $0 }' test.txt
и более гибкая версия, которая позволяет другим поискам строк.
Здесь сложная часть, как иметь дело с '
в качестве разделителя полей для AWK
( исх ).
awk 'BEGIN { FS = "'\''" } ; { gsub($2, "mongodb://username:Password@host1.localhost.com:27017,host2.localhost.com:27017,host3.localhost.com:27017/DBname?authSource=admin\\&w=1\\&replicaSet=replicaname\\&readPreference=secondaryPreferred\\&retryWrites=true") ; print $0 }' test.txt