我需要修改一些文件以替换其中的一部分。文件内容的示例如下所示。
<title>block-quote-line</title>
<path d="M11.86,16.55a4.31,4.31,0,0,0-2.11.56,14.44,14.44,0,0,1,4.36-6,1.1,1.1,0,0,0-1.4-1.7c-4,3.25-5.78,7.75-5.78,10.54A5.08,5.08,0,0,0,10,24.58a4.4,4.4,0,0,0,1.88.44,4.24,4.24,0,1,0,0-8.47Z" class="clr-i-outline clr-i-outline-path-1"></path><path d="M23,16.55a4.29,4.29,0,0,0-2.11.56,14.5,14.5,0,0,1,4.35-6,1.1,1.1,0,1,0-1.39-1.7c-4,3.25-5.78,7.75-5.78,10.54a5.08,5.08,0,0,0,3,4.61A4.37,4.37,0,0,0,23,25a4.24,4.24,0,1,0,0-8.47Z" class="clr-i-outline clr-i-outline-path-2"></path>
<rect x="0" y="0" width="36" height="36" fill-opacity="0"/>
</svg>
文件的class="clr-i-outline clr-i-outline-path-[]"
部分需要修改为fill = "#000000".
与字符串匹配的正则表达式如下
(class=clr-i-outline clr-i-outline-path-[1-9])
现在,我需要将此正则表达式集成到命令中,但是该命令不起作用。
awk -v regex="(class=\"clr-i-outline clr-i-outline-path-\[1-9\]\")" -v trgt="fill = \"#AB7C94\"" '{ gensub (/regex/, trgt, "g" ) ./test.svg}'
我在做什么错了?
答案 0 :(得分:2)
如果test.svg
是您要替换的文件:
awk -v regex='class="clr-i-outline clr-i-outline-path-[1-9]"' -v trgt='fill = "#AB7C94"' '{ print gensub(regex, trgt, "g" )}' test.svg
或者:
awk -v regex='class="clr-i-outline clr-i-outline-path-[1-9]"' -v trgt='fill = "#AB7C94"' '{ gsub(regex, trgt)}1' test.svg
两者都可以在GNU awk上使用。
您可以使用符号引号'
将内部带有双引号的字符串括起来,而不必在单引号内转义"
和[]
。
同样,在将变量称为正则表达式时,只需使用变量名,而不要使用/variable/
。
您并没有打印输出,gensub
不会更改它替换的内容,但是会返回它,因此您只需打印它即可。
另一方面,gsub
会更改,但不会返回更改后的内容,您可以随后打印。