gpt4 book ai didi

perl - sed 和 perl 不替换文件中的字母

转载 作者:行者123 更新时间:2023-12-01 06:35:52 24 4
gpt4 key购买 nike

我有一个文件 1.htm。我想替换字母 ṣ(下面带点的 s)。我尝试同时使用 sed 和 perl,但它没有替换。

sed -i 's/ṣ/s/g' "1.htm"
perl -i -pe 's/ṣ/s/g' "1.htm"

谁能建议一下该怎么做

1.html (不替换 ṣ)

另外我还发现了一件奇怪的事情。 Sed(与上面相同的命令)在一个文件中替换,但在另一个文件中替换,我正在放置链接

replacable.html

unreplacable.html同1.html

为什么会这样。 sed 能够替换一个文件中的 ṣ 而不能替换另一个文件。

最佳答案

您在 html 文件中组合了字符。也就是说,"ṣ" 实际上是一个 "s" 后跟一个 "̣"(下面是一个组合点)。修复 oneliner 的一种可能性是:

perl -C -i -pe 's/s\x{0323}/s/g' "1.htm"

即,为 stdout/stdin 打开 utf8 模式 (-C) 并在 s/// 的左侧显式写入两个字符。

另一种可能性是使用 Unicode::Normalize 规范化所有组合字符,例如:

perl -C -MUnicode::Normalize -Mutf8 -i -pe '$_=NFKC($_); s/ṣ/s/g' "1.htm"

但是这也会规范化输入文件中的所有其他字符,这对您来说可能合适也可能不合适。

关于perl - sed 和 perl 不替换文件中的字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19463002/

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