Я знаю, что это старый пост, но у меня было решение, которое я использовал:
grep -E -m 1 -n 'old' file | sed 's/:.*$//' - | sed 's/$/s\/old\/new\//' - | sed -f - file
В основном используйте grep, чтобы найти первое вхождение и остановиться там. Также напечатайте номер строки, т.е. 5: line. Труба, которая в sed и удалить: и что-нибудь после этого, вы просто остаетесь с номером строки. Труба, которая в sed, которая добавляет s /.*/ замену до конца, которая дает 1-строчный скрипт, который передается в последний sed для запуска в качестве скрипта в файле.
, так что если regex = #include и replace = blah, а первое обнаружение grep находит в строке 5, тогда данные, переданные в последний sed, будут 5s /.*/ blah /.
Я решил вопрос следующим образом: 1. импортировав from bson.objectid import ObjectId
2. изменив маршрут на этот:
# Single Article
@app.route('/home/<string:id>/', methods=['GET','POST'])
def post(id):
# Create Mongo Connection
user = mongo.db.articles
# execute query
article = user.find_one({"_id": ObjectId(id)})
return render_template("post.html", article=article)