我需要在几百份文件中修改以下文字......
{% url project.app.views.chart %}
所以它读取
{% url "project.app.views.chart" %}
根据引号之间的文字每次都不同,你知道下一个方法吗?
谢谢,
答案 0 :(得分:4)
这可以作为soons,因为您的输入字符串中没有任何%
个字符:
sed -r 's/url ([^%]+) %/url "\1" %/g'
<强>测试强>
$ echo '{% url test %}{% url test 2 %}' | sed -r 's/url ([^%]+) %/url "\1" %/g'
{% url "test" %}{% url "test 2" %}
让我们解释一下这个答案。 -r
选项在此处,因为extended regexes
是我更喜欢使用的选项。
现在,替换部分。
sed 's/pattern/replacement/g'
用于替换文本,将模式与regular expression
匹配,并将其替换为替换。
g
是一个替换选项,表示您希望将文本替换为文本中存在的次数。
所以这里的模式是url ([^%]+) %
。 url
和%
部分非常符合逻辑且易于获取(如果没有,请告诉我)。 ([^%]+)
表示“捕获不是%
的所有内容,并且至少由一个字符”组成。括号允许保存此部分,以便在\x
之后重复使用,其中x是括号组的编号(此处它将是\1
)。
因此,当它收到{% url test %}
时,模式与url test %
匹配,test
保存在\1
下,并用url "\1" %
重写{{1} }}。
模式之前和之后的部分不会被修改,因此它将输出url "test" %
要避免添加另一组引号(如果已经存在),只需在{% url "test" %}
之后添加[^"]
:url
。
这是完整的命令:
url [^"]
答案 1 :(得分:0)
假设您要在url
和%}
之间换行。
这样的事情可能有用:
sed -e 's/url /url "/' -e 's/ %}/" %}/'