我希望以一个大写字母开头的行是大写的,其他行不应该被触及。
所以这个输入:
cat myfile
a
b
Cc
应该导致此输出:
a
b
CC
我尝试过这个命令,但如果我使用分组,则不匹配:
cat myfile | sed -r 's/\([A-Z]+.*\)/\U\1/g'
我做错了什么?
答案 0 :(得分:4)
使用-r
选项时,不得将\
放在用于分组的括号之前。所以它应该是:
sed -r 's/^([A-Z].*)/\U\1/' myfile
另外,请注意您需要^
来匹配行的开头。不需要g
修饰符,因为您匹配整行。
答案 1 :(得分:1)
cat myfile | sed 's/^\([A-Z].*\)$/\U\1/'
答案 2 :(得分:1)
\U
是 GNU sed
扩展名。
替代那些不可用的平台(例如,macOS,其 BSD awk
实现):
awk '/^[A-Z]/ { print toupper($0); next } 1'
答案 3 :(得分:0)
sed '/^[A-Z].*[a-z]/ s/.*/\U\1/' YourFile
仅在线不符合
答案 4 :(得分:0)
这可能适合你(GNU sed):
sed 's/^[[:upper:]].*/\U&/' file