2016-08-17 66 views
3

我試圖使用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已經引述發生。

什麼是正確的方法來做我的意思?

+0

是否有可能使用另一種語言,即與一個支持'(* SKIP)(* FAIL)'? – Jan

+1

爲什麼不只是捕捉[^']呢? – lynxlynxlynx

回答

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 %} 
+0

是的,你是對的@ John1024'([^'] [^'] +)'是更正確的,正如你所建議的。 – anubhava