[英]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.