正则表达式替换为sed linux中的单引号

时间:2014-03-07 04:38:23

标签: django bash sed

我正在尝试使用正则表达式为单词添加单引号,如果在单词,双精度或无引号的表达式中,请注意。我有这个

find . -type f -print0 | xargs -0 sed -i "s/{% url \([^\' >][^\" >][^ >]*\)/{% url \'\1\'/g"

实施例

{% url something foo bar %}
{% url "something" foo bar %}
{% url 'something' foo bar %}

应替换为

{% url 'something' foo bar %}

但是以防万一

{% url "something.else" foo bar %}

它变为

{% url '"something.else"' foo bar %}

单引号无法在单个qoutes中进行转义,而对于双打/双打则不一样吗?我该怎么办?正则表达式很棒,但也很糟糕。谢谢!

原点是Django 1.5中的网址问题

"Django release 1.5: 'url' requires a non-empty first argument. The syntax changed in Django 1.5"

我找到了更改为双引号here的答案。

但是单引号会出现同样的问题,将'word'替换为''word'“。

1 个答案:

答案 0 :(得分:1)

以下内容可能适合您:

sed -r "s/{% url ['\"]?([^ '\"]*)['\"]?/{% url '\1'/g"

输入:

{% url something foo bar %}
{% url "something" foo bar %}
{% url 'something' foo bar %}
{% url "something.else" foo bar %}

它会产生:

{% url 'something' foo bar %}
{% url 'something' foo bar %}
{% url 'something' foo bar %}
{% url 'something.else' foo bar %}