簡體   English   中英

sed查找並替換

[英]Sed find and replace

我需要在幾百個文檔中修改以下文本...

{% url project.app.views.chart %}

所以它讀

{% url "project.app.views.chart" %}

您是否知道基於每次引用之間不同的文本的下一步操作?

謝謝,

只要您在輸入字符串中沒有任何%字符,此方法便會起作用:

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正則extended regexes是我更喜歡使用的。

現在,替換部分。

sed 's/pattern/replacement/g'

用於替換文本,將模式作為regular expression匹配,並用replace 替換

g是替換選項,表示您希望替換文本中出現的模式多次。

因此,這里的模式url ([^%]+) % url% part很合邏輯且易於獲取(如果沒有,請告訴我)。 ([^%]+)意思是“捕獲不是%且至少由字符組成的所有內容” 括號允許保存此部分,並在\\x之后重用,其中x是括號組的編號(此處為\\1 )。

因此,當它收到{% url test %} ,該模式與將test保存在\\1下的url test %匹配,並用url "\\1" %重寫它,因此url "test" % 模式之前和之后的部分均未修改,因此它將輸出{% url "test" %}

其他可能性

為了避免添加另外一組引號(如果已有的話),只需在url之后添加[^"]url [^"]

這是完整的命令:

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

假設您要在url%}之間包裝字符串。

這樣的事情可能會起作用:

sed -e 's/url /url "/' -e 's/ %}/" %}/'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM