2012-04-04 60 views
7

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

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

将成为:

The bear ate the fish. 
The river was too fast. 
  • 文档中包含一些特殊的字母:A,A,A,A,ǎ,A,B,C,d,E,E,E, ,ě,ē,,,,,,,ǒ,ǒ,,,,,ǐ,,,,,ǐ,ī, r,s,t,u,u,uu,uu,uu,ui,ui,u,v,w,x,y和z。
  • 这些字母的大写形式是:A,A,A,A,B,C,D,E,E,E,E,F,G,H,I,I ,,Ì,Ǐ,Ī,,,,,,,,,,,,,Ō,,,Ò,Ò,,,Ǔ,Ǔ,Ò,Ǔ,Ǔ ,,Ǘ,Ǜ,Ǚ,Ǖ,Ū,V,W,X,Y和Z.

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

+1

我认为工程师的意思是什么编程语言。 PHP等。 – 2012-04-04 07:13:54

+0

BASH将是首选。 – Village 2012-04-04 07:15:07

+0

问题是标签的“庆典” ...... – 2012-04-04 07:15:09

回答

11

使用sed

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

一点解释:

  • ^代表行的开始。
  • .匹配任何字符
  • \U转换为大写
  • \(... \)指定要以后引用(如\1在这种情况下)的部分;圆括号将在这里逃脱。

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

2

要更改文件的地点:

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

作品!而且,为什么我也得(警告??)错误:sed的:无法读取:没有这样的文件或目录? – bikashg 2013-06-06 13:46:03

+0

@bikashg你,因为在我的answer-- sorry--我现在已经固定成为一个错字得到了错误。 – joelparkerhenderson 2013-06-09 05:54:44

5
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> 
+0

适用于OSX。谢谢。 – Sufian 2014-05-23 10:50:10

+0

这只是为我工作在OSX – 2018-02-18 03:24:35

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

有与s/^\(.\)/\U\1/几个SED的答案。GNU sed的也有\u指令只改变一个字母为大写,所以

sed 's/./\u&/' 

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

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

我会说这是更好的答案之一。 – 2013-12-04 12:49:08

0

bash

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

测试/演示(删除后的代码更完整的输出):

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. 
相关问题