9

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

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。

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

4

6 回答 6

16

使用sed

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

小解释:

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

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

于 2012-04-04T07:14:12.500 回答
7
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> 
于 2012-04-04T07:20:26.450 回答
6

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

sed 's/./\u&/'

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

sed 's/[[:alpha:]]/\u&/'
于 2012-04-04T12:52:35.047 回答
2

要就地更改文件:

sed -i -e 's/^\(.\)/\U\1/' file.txt
于 2012-04-04T07:19:54.873 回答
1

你可以把你的特殊字符代替 az 和 AZ

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
于 2012-04-04T09:57:35.603 回答
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.
于 2017-06-22T13:33:57.727 回答