繁体   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