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

少し説明:

  • aは行の^始まりを表します。
  • .任意の文字に一致します
  • \U大文字に変換します
  • \( ... \)後で参照するセクションを指定します(\1この場合のように)。ここでは括弧を省略します。

データが失われるため、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 に答える