所以我从Django 1.3升级> 1.4并且要求{% url app:X:Y %}
的模式为{% url "app:X:Y" %}
。项目中有493个这种模式的实例,因此我试图找到如何自动化它。
要清楚的是,括号内可能还有其他单词,但它始终是"{% url "
之后的单词,直到我必须包装的下一个空格。
我查看了sed
,但我不确定如何使用grep
正常工作。有没有人有一个可以在这里工作的例子?
使用示例文件查看:
此文件有2个网址,但它应该只捕获第二个网址(grep isn确实是问题,它是替换。)此文件应完全相同,但{% url admin:index %}
除外应为{% url "admin:index" %}
{% extends "admin/index.html" %}
{% load i18n %}
{% load url from future %}
{% if not is_popup %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url admin:index %}">{% trans 'Home' %}</a>
›
{% for app in app_list %}
这是一个查找所有案例的grep,但是对于那些已经有引号的人来说它失败了,当然它实际上并没有编辑它们grep -r "{% url .* " .
答案 0 :(得分:2)
您只需将正则表达式设置为此表单:{% url <things> %}
。通过将组括在括号中,我们可以将它们打印出来。注意<things>
是一组A:B:C:...:Z
,也就是我们定义为&#34;任何符合空格的内容&#34}。
所有在一起:
sed 's/\({% url \)\([^ ]*\)\( %}\)/\1"\2"\3/' file
您可以通过以下方式对给定文件夹中的所有文件执行此操作:
for file in *
do
sed '...' "$file"
done
如果您说sed -i.bak '...' file
,您将获得就地编辑的文件,并创建备份file.bak
(这样做总是好的,以防万一!)。
将您的给定文件存储在a
中,它会返回...
$ sed 's/\({% url \)\([^ ]*\)\( %}\)/\1"\2"\3/' a
{% extends "admin/index.html" %}
{% load i18n %}
{% load url from future %}
{% if not is_popup %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url "admin:index" %}">{% trans 'Home' %}</a>
›
{% for app in app_list %}