如果它们以大写字符开头,则为Sed大写行

时间:2014-03-20 01:09:45

标签: sed

我希望以一个大写字母开头的行是大写的,其他行不应该被触及。

所以这个输入:

cat myfile
a
b
Cc

应该导致此输出:

a
b
CC

我尝试过这个命令,但如果我使用分组,则不匹配:

cat myfile | sed -r 's/\([A-Z]+.*\)/\U\1/g'

我做错了什么?

5 个答案:

答案 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