gpt4 book ai didi

regex - awk gensub() 不匹配正则表达式

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:07 24 4
gpt4 key购买 nike

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

    <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。

可以用单引号'将里面有双引号的字符串括起来,不需要转义"[] 单引号内。
此外,当将变量引用为正则表达式时,只需使用变量名,而不是 /variable/

而且你没有打印输出,gensub 不会改变它替换的东西但会返回它,所以你只需打印它。
另一方面,gsub 会改变,但不会返回它改变的东西,你可以在之后打印。

关于regex - awk gensub() 不匹配正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54749041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com