使用sed将前2个单词的首字母转换为Upper

时间:2014-03-24 10:57:29

标签: regex sed

我知道我可以用awk做到这一点,但我想知道如何用sed做到这一点。 我知道如何将每行的第一个字母转换为高位:

sed  's/^\(.\)/\U\1/' input > output

但我想把前两个单词的第一个字母转换为Upper。

输入文件:

  

这是我的档案

输出文件:

  

这是我的档案

我认为这必须与sed一起使用,但我无法弄明白。

4 个答案:

答案 0 :(得分:1)

你可以使用-e做两个块:

$ echo "this is my file" | sed -e 's/^\(.\)/\U\1/' -e 's/ \(.\)/ \U\1/'
This Is my file                    ^^^^^^^^^^^^^^      ^^^^^^^^^^^^^^^
                                   first word          second word

请注意,您可以使用-r参数更清晰地显示线条,该参数允许使用简单的(XXX)代替\(XXX\)

$ echo "this is my file" | sed -re 's/^(.)/\U\1/' -e 's/ (.)/ \U\1/' 
This Is my file

答案 1 :(得分:0)

使用捕获群组和\U以及\E打开大写字母:

sed 's/^\(.\)\([^ ]* \)\(.\)/\U\1\E\2\U\3/' input > output

sed -r 's/^(.)([^ ]* )(.)/\U\1\E\2\U\3/' input > output

引自the manual

  

\U

Turn the replacement to uppercase until a \L or \E is found

举个例子:

$ echo 'this is my life' | sed 's/^\(.\)\([^ ]* \)\(.\)/\U\1\E\2\U\3/'
This Is my life

答案 2 :(得分:0)

我知道它没有被要求awk,但如果其他人感兴趣,可以发布一般解决方案。

echo "this is my file" | awk '{for (i=1;i<=2;i++) sub(".",substr(toupper($i),1,1),$i)}1'
This Is my file

可以轻松更改为n个单词,如果您喜欢要更改的单词的两个首字母:

echo "this is my file" | awk '{for (i=1;i<=2;i++) sub("..",substr(toupper($i),1,2),$i)}1'
THis IS my file

答案 3 :(得分:0)

只是为了好玩,perl

perl -ane '@F[0,1] = map {ucfirst} @F[0,1]; print "@F"'