如何使用逗号作为分隔符将特定位置的字符串大写?

时间:2019-01-11 15:32:28

标签: sed

如果我有一个用逗号作为分隔符的文本文件,我该如何计算分隔符并在第三个分隔符上从小写变为大写? 如果我有这样的文本文件:

alex pallex, bakerstreet 5, 87236, ducktales, 213445  
Donald Duck, weebfoot street 1313, 12345, duckburg, 212344

我想在第三个逗号后在字符串上使用大写字母,我该如何使用sed做到这一点。 Ducktales从DUCKTALES och Duckburg更改为DUCKBURG 我知道有AWk,但我需要使用sed。

3 个答案:

答案 0 :(得分:2)

使用awk:

$ awk 'BEGIN{FS=OFS=", "}{$4=toupper($4)}1' file
alex pallex, bakerstreet 5, 87236, DUCKTALES, 213445  
Donald Duck, weebfoot street 1313, 12345, DUCKBURG, 212344

答案 1 :(得分:1)

使用GNU sed

$ sed 's/[^,]*/\U&/4' file
alex pallex, bakerstreet 5, 87236, DUCKTALES, 213445  
Donald Duck, weebfoot street 1313, 12345, DUCKBURG, 212344

答案 2 :(得分:0)

$ cat file.txt
alex pallex, bakerstreet 5, 87236, ducktales, 213445
Donald Duck, weebfoot street 1313, 12345, duckburg, 212344

$ sed 's/\([^\,]*\,[^\,]*\,[^\,]*\,\)\([^\,]*\)/\1\U\2/' file.txt
alex pallex, bakerstreet 5, 87236, DUCKTALES, 213445
Donald Duck, weebfoot street 1313, 12345, DUCKBURG, 212344

不确定是否无法进行转义,但是您可以尝试:

sed 's/\([^,]*,[^,]*,[^,]*,\)\([^,]*\)/\1\U\2/' file.txt

无论如何,这很麻烦,如果您使用GNU sed,PesaThe's answer很棒。