Changing the first letter of every line in a file to uppercase

后端 未结 6 1612
无人及你
无人及你 2021-01-02 11:04

I need to change the first letter of every line in a file to uppercase, e.g.

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

Would become:

相关标签:
6条回答
  • 2021-01-02 11:13

    There's a few sed answers with s/^\(.\)/\U\1/. GNU sed also has a \u directive that changes only the next letter to uppercase, so

    sed 's/./\u&/'
    

    Although if the first character on a line is a space, you won't see an uppercase letter, so

    sed 's/[[:alpha:]]/\u&/'
    
    0 讨论(0)
  • 2021-01-02 11:14

    To change the file in place:

    sed -i -e 's/^\(.\)/\U\1/' file.txt
    
    0 讨论(0)
  • 2021-01-02 11:19

    Pure bash:

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

    Test/demo (remove the code after done for more complete output):

    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
    

    Output:

    E, foo bar.
    E, foo bar.
    É, foo bar.
    È, foo bar.
    Ě, foo bar.
    Ē, foo bar.
    
    0 讨论(0)
  • You can put your special characters in place of a-z and 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
    
    0 讨论(0)
  • 2021-01-02 11:33
    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 讨论(0)
  • 2021-01-02 11:34

    Use sed:

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

    Little explanation:

    • the ^ represents the start of a line.
    • . matches any character
    • \U converts to uppercase
    • \( ... \) specifies a section to be referenced later (as \1 in this case); parentheses are to be escaped here.

    Do not try to redirect the output to the same file in one command (i.e. > yourfile) as you will lose your data. If you want to replace in the same file then check out joelparkerhenderson's answer.

    0 讨论(0)
提交回复
热议问题