繁体   English   中英

Awk gensub()与正则表达式不匹配

[英]Awk gensub() does not match regex

我需要修改一些文件以替换其中的一部分。 文件内容的示例如下所示。

    <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}'

我究竟做错了什么?

如果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上运行。

您可以使用符号引号'将内部包含双引号的字符串括起来,而无需在单引号内转义"[]
同样,当将变量称为regex时,只需使用变量名,而不要使用/variable/

而且您没有打印输出, gensub不会更改它替换的东西,但是会返回它,因此您只打印它。
另一方面, gsub会更改,但不会返回更改后的内容,您可以随后打印。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM