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