我在sed中遇到了这两个命令\u
和\U
(以及其他如\l
和\L
)。我必须承认我是一个新手,对GNU sed几乎没有经验。
我尝试了以下两个命令,但得到了相同的结果:
# I have tested this on Ubuntu 20.04
echo "abc" | sed 's/./\u&/g' # output is: ABC
echo "abc" | sed 's/./\U&/g' # output is: ABC
两个命令的输出结果相同,那么它们之间有什么区别呢?
我在sed中遇到了这两个命令\u
和\U
(以及其他如\l
和\L
)。我必须承认我是一个新手,对GNU sed几乎没有经验。
我尝试了以下两个命令,但得到了相同的结果:
# I have tested this on Ubuntu 20.04
echo "abc" | sed 's/./\u&/g' # output is: ABC
echo "abc" | sed 's/./\U&/g' # output is: ABC
在替换操作中,\u
将下一个字符转换为大写字母,而\U
将替换的其余部分转换为大写字母,或者直到出现\L
或\E
为止。
如果您在echo abc | sed 's/.*/\u&/'
中使用模式.*
(而不是.
),则您将获得Abc
,请注意示例并不能展示它们之间的区别,因为您一次只替换一个字符。
这些命令在info sed
和这里有文档:https://www.gnu.org/software/sed/manual/sed.html#The-_0022s_0022-Command
.
匹配单个字符,而 .*
将匹配每个字符之外,我不知道该如何更清楚地表达。如果你尝试 's/.*/\u&/'
,你会得到 Abc
。还要注意,g
表示在行中重复替换模式的每个出现。也许 echo abc | sed 's/./\u&_/g'
会更具说明性,它打印出 A_B_C_
。 - dan
.
更改为.*
并查看差异。同时去掉g
标志。 - potong