sed 将句号后的字母替换为大写

sed 将句号后的字母替换为大写

我刚刚经历了一个sed教程文章。有人可以帮我解释一下这个命令吗(它将字母在句点后更改为大写)

sed -E 's/(^[a]|\. [a-z])/\U&\E/g' filename.txt

答案1

您链接到的教程非常肤浅。

如果你想认真使用 sed,我建议http://www.grymoire.com/Unix/Sed.html 反而。

sed 中的命令s采用 a from pattern、 ato string和可选的 some flags。传统上,它们由字符分隔/,但可以使用任何标点符号,如果 from 或 to 参数包含 / 字符,则这样做是明智的。

所以在这种情况下,标志是g, from 模式是(^[a]|\. [a-z]), to 字符串是\U&\E

此时您需要知道如何理解 from 模式。这些()字符用于将模式的各个部分组合在一起。这|是一个or操作,因此this|that将匹配thisthat。匹配^行的开头,[a]匹配字母a,因此匹配行开头的^[a]字母。 athe\.匹配一个.字符,the space 匹配一个空格,the[a-z]匹配一个介于a和之间的字符z(希望这都是小写字母,没有其他字母)。把它们放在一起,你会得到\. [a-z]匹配一个句号(句号),后跟一个空格,后跟一个介于a和之间的字母z

to 字符串\U&\E解码如下。 the&是与 from 模式匹配的字符。表示\U将后面的内容转换为大写,\E表示结束转换。 \U 和 \E 是 sed 的 gnu 扩展。这是 POSIXsed

这些g标志表示尽可能多次地重复匹配并进行替换。

因此,您从教程中复制的代码将转换为任何一个行开头的小写 a 或“周期空间 lower_case_letter”到大写的序列。

相关内容