如何使用sed匹配某个单词然后用引号包装该单词?

时间:2016-08-17 19:43:05

标签: regex sed

我正在尝试使用sed替换所有出现的

{% url something arg1 arg2 ... argN %}

{% url 'something' arg1 arg2 ... argN %}(注意引号)

但仅当something尚未引用时才会被引用!

我尝试了以下内容:

s/{% url [^']\(\S\+\)/{% url '\1'/

但是它捕获something中的第一个字符。结果将是:

{% url 'omething' arg1 arg2 ... argN %}

如果我改为:

s/{% url[^']\(\S\+\)/{% url '\1'/

然后,它无法正确排除已引用something的事件。

做我的意思的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用此sed:

# test data
cat file
{% url something arg1 arg2 ... argN %} with
{% url 'foobar' arg1 arg2 ... argN %}

# sed command
sed -E "s/(\{% url )([^'][^' ]+) /\1'\2' /" file
{% url 'something' arg1 arg2 ... argN %} with
{% url 'foobar' arg1 arg2 ... argN %}