将文件中每行的第一个字母更改为大写

时间:2012-04-04 07:09:10

标签: bash case unicode-string

我需要将文件中每行的第一个字母更改为大写,例如

the bear ate the fish.
the river was too fast.

会变成:

The bear ate the fish.
The river was too fast.
  • 该文件包含一些特殊字母:a,a,á,à,ǎ,ā,b,c,d,e,e,é,è,ě,ē,f,g,h,i,i, í,ì,ǐ,ī,j,k,l,m,n,o,o,ó,ò,ǒ,ō,p,q,r,s,t,u,u,ú,ù,ǔ, ü,ǘ,ǜ,ǚ,ǖ,ū,v,w,x,y和z。
  • 这些字母的大写形式是:A,A,Á,À,Ǎ,Â,B,C,D,E,E,É,È,Ě,Ē,F,G,H,I,I ,Í,Ì,Ǐ,Ī,J,K,L,M,N,O,O,Ó,Ò,Ǒ,Ō,P,Q,R,S,T,U,U,Ú,Ù,Ǔ ,Ü,Ǘ,Ǜ,Ǚ,Ǖ,Ū,V,W,X,Y和Z。

如何将文件中每一行的第一个字母更改为大写?

6 个答案:

答案 0 :(得分:13)

使用sed

sed  's/^\(.\)/\U\1/' yourfile > convertedfile

小解释:

  • ^表示一行的开头。
  • .匹配任何字符
  • \U转换为大写
  • \( ... \)指定稍后要引用的部分(在本例中为\1);括号将在这里逃脱。

尝试将输出重定向到一个命令中的同一文件(即 > yourfile ),因为您将丢失数据。如果你想在同一个文件中替换,那么请查看joelparkerhenderson的答案。

答案 1 :(得分:6)

pearl.311> cat file1
linenumber11
linenumber2  
linenumber1
linenumber4
linenumber6
pearl.312> awk '{print toupper(substr($0,1,1))""substr($0,2)}' file1
Linenumber11
Linenumber2  
Linenumber1
Linenumber4
Linenumber6
pearl.313> 

答案 2 :(得分:6)

s/^\(.\)/\U\1/有几个sed答案。 GNU sed还有一个\u指令,它只将下一个字母改为大写,所以

sed 's/./\u&/'

虽然如果一行中的第一个字符是空格,则不会看到大写字母,所以

sed 's/[[:alpha:]]/\u&/'

答案 3 :(得分:2)

要更改文件:

sed -i -e 's/^\(.\)/\U\1/' file.txt

答案 4 :(得分:1)

您可以将特殊字符替换为a-z和A-Z

function up { local c="$1" ; echo -e "$c" | tr '[a-z]' '[A-Z]' ; }
while read line
do
  echo $(up ${line:0:1})${line:1}
done

答案 5 :(得分:0)

bash

while read x ; do echo "${x^*}" ; done < inputfile > outputfile

测试/演示(删除done之后的代码以获得更完整的输出):

for f in a, a, á, à, ǎ, ā, b, c, d, e, e, é, è, ě, ē, f, g, h, i, i, í, ì, ǐ, ī, \
         j, k, l, m, n, o, o, ó, ò, ǒ, ō, p, q, r, s, t, \
         u, u, ú, ù, ǔ, ü, ǘ, ǜ, ǚ, ǖ, ū, v, w, x, y, and z.
do  echo "$f foo bar." ; done | 
while read x ; do echo "${x^*}" ; done | head -15 | tail -6

输出:

E, foo bar.
E, foo bar.
É, foo bar.
È, foo bar.
Ě, foo bar.
Ē, foo bar.