Issue
I must to convert the 4 column to upper case with only one sed command.
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
This it's my best movement but change all columns.
sed -e 's/\(.*\)/\U\1/'
I really want understand the command, but I really lose myself why use" \ " or how to read it.
Solution
You can use
sed 's/^\(\([^,]*,\)\{3\}\)\([^,]*\)/\1\U\3/' # POSIX BRE
sed -E 's/^(([^,]*,){3})([^,]*)/\1\U\3/' # POSIX ERE
See 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\}\)\([^,]*\)/\1\U\3/' <<< "$s"
Output:
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
Details:
^
- start of string(([^,]*,){3})
- Group 1: three repetitions of any zero or more chars other than a comma and then a comma([^,]*)
- Group 3: zero or more chars other than a comma.
Answered By - Wiktor Stribiżew Answer Checked By - David Marino (WPSolving Volunteer)