![sed 将句号后的字母替换为大写](https://linux22.com/image/98522/sed%20%E5%B0%86%E5%8F%A5%E5%8F%B7%E5%90%8E%E7%9A%84%E5%AD%97%E6%AF%8D%E6%9B%BF%E6%8D%A2%E4%B8%BA%E5%A4%A7%E5%86%99.png)
我刚刚经历了一个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
将匹配this
或that
。匹配^
行的开头,[a]
匹配字母a
,因此匹配行开头的^[a]
字母。 a
the\.
匹配一个.
字符,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”到大写的序列。