使用 SED 将特定列的小写转换为大写

Use SED to convert specific column lower to upper case

我必须只用一个 sed 命令将第 4 列转换为大写。

user,gender,age,native_lang,other_lang
0,M,19,finnish,english swedish german 
1,M,30,urdu,english 
2,F,26,finnish,english swedish german
3,M,20,finnish,english french swedish 
4,F,20,finnish,english swedish 

这是我最好的动作,但更改所有列。

sed -e 's/\(.*\)/\U/' 

我很想看懂命令,但是我很迷茫为什么要用"\"或者怎么读。

您可以使用

sed 's/^\(\([^,]*,\)\{3\}\)\([^,]*\)/\U/' # POSIX BRE
sed -E 's/^(([^,]*,){3})([^,]*)/\U/'      # POSIX ERE

参见an online demo

s='user,gender,age,native_lang,other_lang
0,M,19,finnish,english swedish german 
1,M,30,urdu,english 
2,F,26,finnish,english swedish german
3,M,20,finnish,english french swedish 
4,F,20,finnish,english swedish '
sed 's/^\(\([^,]*,\)\{3\}\)\([^,]*\)/\U/' <<< "$s"

输出:

user,gender,age,NATIVE_LANG,other_lang
0,M,19,FINNISH,english swedish german 
1,M,30,URDU,english 
2,F,26,FINNISH,english swedish german
3,M,20,FINNISH,english french swedish 
4,F,20,FINNISH,english swedish 

详情:

  • ^ - 字符串开头
  • (([^,]*,){3}) - 第 1 组:除了逗号和逗号之外的任何零个或多个字符的三次重复,然后是逗号
  • ([^,]*) - 第 3 组:逗号以外的零个或多个字符。

这可能适合您 (GNU sed):

sed 's/[^,]*/\U&/4' file

大写第四组non-commas.


如果不是 headers,请使用:

sed '1!s/[^,]*/\U&/4' file