我需要将文件中每行的第一个字母更改为大写,例如
the bear ate the fish.
the river was too fast.
会变成:
The bear ate the fish.
The river was too fast.
如何将文件中每一行的第一个字母更改为大写?
答案 0 :(得分:13)
使用sed
:
sed 's/^\(.\)/\U\1/' yourfile > convertedfile
小解释:
^
表示一行的开头。.
匹配任何字符\U
转换为大写\( ... \)
指定稍后要引用的部分(在本例中为\1
);括号将在这里逃脱。 不尝试将输出重定向到一个命令中的同一文件(即 ),因为您将丢失数据。如果你想在同一个文件中替换,那么请查看joelparkerhenderson的答案。> yourfile
答案 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.