我知道我可以用awk做到这一点,但我想知道如何用sed做到这一点。 我知道如何将每行的第一个字母转换为高位:
sed 's/^\(.\)/\U\1/' input > output
但我想把前两个单词的第一个字母转换为Upper。
输入文件:
这是我的档案
输出文件:
这是我的档案
我认为这必须与sed一起使用,但我无法弄明白。
答案 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"'