2014-03-07 142 views
1

我正在嘗試使用正則表達式向單詞添加單引號,注意如果表達式中有單引號,雙引號或無引號。我有這個正則表達式在sed linux中用單引號替換

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中轉義,並且雙/雙打也不是這樣嗎?我該怎麼做?正則表達式太棒了,但也有一些矛盾。謝謝!!

的起源是有問題的URL在Django 1.5

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

我找到了答案更改爲雙引號here

但同樣的問題發生在單引號中,將'word'替換爲''word'「。

+0

要得到很好地注意你的問題,考慮格式化您的帖子正確。 – slayedbylucifer

+0

對不起,我想這是清楚的解釋和格式。我不明白你的格式是否正確,這是我的第一個問題,但總是提供一個參考站點,也會說西班牙語,所以如果有拼寫錯誤,我也會藉此機會道歉;) – Rulolp

回答

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

+1代表簡單高效的代碼。只是一個小信息,這不允許一個簡單的引號在2個雙引號(或相反),如''不起作用''。用3 s //連續解決,逐個解決或用'foo bar%}'「pattern」完成。 – NeronLeVelu

+1

謝謝,但它對我不起作用。 Sed命令看起來非常強大,但太難了。 它給我無效的引用whith -i和無效的表達與-r。另外我想查看目錄中的所有文件並更改行,以便我需要查找。 -type f -print0 | xargs -0 sed -i據我所知 似乎仍然繼續逃避單引號的同樣的問題。使用我發佈的命令解決它,因爲沒有雙引號,但將來我需要再次使用它,幸運的是有單引號或雙引號,但不是兩者的混合。 很明顯,我仍然不明白正則表達式如何運作 – Rulolp