如何将每个单词的首字母大写?

时间:2009-05-19 01:31:15

标签: language-agnostic scripting

我需要一个任何语言的脚本来大写文件中每个单词的第一个字母。

感谢所有答案。

Stackoverflow摇滚!

20 个答案:

答案 0 :(得分:13)

在Python中,open('file.txt').read().title()就足够了。

答案 1 :(得分:11)

使用命令行中的非标准(Gnu扩展名)sed实用程序:

sed -i '' -r 's/\b(.)/\U\1/g' file.txt

如果您不希望它就地修改文件,请删除“-i”。

请注意,您不应在便携式脚本中使用它

答案 2 :(得分:6)

C#:

string foo = "bar baz";
foo = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(foo);
//foo = Bar Baz

答案 3 :(得分:3)

您也可以使用终端中的命令行格式Ruby来执行此操作:

cat FILENAME | ruby -n -e 'puts gsub(/\b\w/, &:upcase)'

或者:

ruby -e 'puts File.read("FILENAME").gsub(/\b\w/, &:upcase)'

答案 4 :(得分:3)

在shell中,使用ruby,这可以假设您的输入文件名为FILENAME,它应该保留所有现有的文件格式 - 它不会像其他一些解决方案那样折叠间距:

cat FILENAME | ruby -n -e 'puts $_.gsub(/^[a-z]|\s+[a-z]/) { |a| a.upcase }'

答案 5 :(得分:3)

斯卡拉:

scala> "hello world" split(" ") map(_.capitalize) mkString(" ")
res0: String = Hello World

或者,鉴于输入应该是一个文件:

import scala.io.Source
Source.fromFile("filename").getLines.map(_ split(" ") map(_.capitalize) mkString(" "))

答案 6 :(得分:2)

击:

$ X=(hello world)
$ echo ${X[@]^}
Hello World

答案 7 :(得分:2)

执行此操作的简单perl脚本:(通过 http://www.go4expert.com/forums/showthread.php?t=2138

sub ucwords {
  $str = shift;
  $str = lc($str);
  $str =~ s/\b(\w)/\u$1/g;
  return $str;
}

while (<STDIN>) {
    print ucwords $_;
}

然后用

调用它
perl ucfile.pl < srcfile.txt > outfile.txt

答案 8 :(得分:1)

这是在PHP中完成的。

$string = "I need a script in any language to capitalize the first letter of every word in a file."
$cap = ucwords($string);

答案 9 :(得分:1)

这是另一个Ruby解决方案,使用Ruby的漂亮的小型单行脚本帮助程序(自动读取输入文件等)。

ruby -ni~ -e "puts $_.gsub(/\b\w+\b/) { |word| word.capitalize }" foo.txt

(假设您的文本存储在名为foo.txt的文件中。)

如果您的文本包含非ASCII字符,最好与Ruby 1.9一起使用,并提供强大的多语言支持。

答案 10 :(得分:1)

VB.Net:

Dim sr As System.IO.StreamReader = New System.IO.StreamReader("c:\lowercase.txt")
Dim str As String = sr.ReadToEnd()
sr.Close()
str = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str)
Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter("c:\TitleCase.txt")
sw.Write(str)
sw.Close()

答案 11 :(得分:1)

红宝石:

irb> foo = ""; "foo bar".split.each { |x| foo += x.capitalize + " " }
=> ["foo", "bar"]

irb> foo
=> "Foo Bar "

答案 12 :(得分:1)

php使用ucwords($ string)或ucwords('所有这些将以大写字母'开头)来完成这个伎俩。所以你可以打开一个文件并获取数据,然后使用这个函数:

<?php 
$file = "test.txt"; 
$data = fopen($file, 'r');
$allData = fread($data, filesize($file));
fclose($fh);
echo ucwords($allData);
?>

编辑,我的代码被切断了。遗憾。

答案 13 :(得分:0)

perl的:

$ perl -e '$foo = "foo bar"; $foo =~ s/\b(\w)/uc($1)/ge; print $foo;'

Foo Bar

答案 14 :(得分:0)

在红宝石中:

str.gsub(/^[a-z]|\s+[a-z]/) { |a| a.upcase }

hrm,实际上这更好:

str.each(' ') {|word| puts word.capitalize}

答案 15 :(得分:0)

虽然评论中有it was mentioned,但没有人发布awk方法解决此问题:

$ cat output.txt
this is my first sentence. and this is the second sentence. that one is the third.
$
$ awk '{for (i=0;i<=NF;i++) {sub(".", substr(toupper($i), 1,1) , $i)}} {print}' output.txt 
This Is My First Sentence. And This Is The Second Sentence. That One Is The Third.

解释

我们遍历字段并将每个单词的第一个字母大写。如果字段分隔符不是空格,我们可以使用-F "\t"-F "_"或其他任何内容来定义它。

答案 16 :(得分:0)

zsh解决方案

#!/bin/zsh
mystring="vb.net lOOKS very unsexy"
echo "${(C)mystring}"
Vb.Net Looks Very Unsexy

注意在每个非字母字符后执行 CAP ,请参阅VB.Net

答案 17 :(得分:0)

Amiga上AMOS Basic的非常基本版本 - 仅将空格视为单词分隔符。我确信有一种更好的使用PEEK和POKE的方式,但是我的记忆相当生疏,超过15年。

FILE$=Fsel$("*.txt")
Open In 1,FILE$
Input #1,STR$
STR$=Lower$(STR$)
L=Len($STR)
LAST$=" "
NEW$=""
For I=0 to L-1
  CUR$=MID$(STR$,I,1)
  If LAST$=" "
    NEW$=NEW$+Upper$(CUR$)
  Else
    NEW$=NEW$+$CUR$
  Endif
  LAST$=$CUR$
Next
Close 1
Print NEW$

我很想念古老的AMOS,这是一门很好的学习语言......但是很难看,呵呵。

答案 18 :(得分:0)

使用awk的另一个解决方案,假装更简单而不是shorter;)

$ cat > file
  thanks for all the fish
  ^D
$ awk 'function tocapital(str) {
           if(length(str) > 1)
               return toupper(substr(str, 1, 1)) substr(str,2)
           else
               return toupper(str)
       }

       {
           for (i=1;i<=NF;i++) 
               printf("%s%s", tocapital($i), OFS);
           printf ORS
       }
      ' < file
  Thanks For All The Fish

答案 19 :(得分:0)

如果使用管道和Python:

$ echo "HELLO WORLD" | python3 -c "import sys; print(sys.stdin.read().title())"
Hello World

例如:

$ lorem | python3 -c "import sys; print(sys.stdin.read().title())"
Officia Est Omnis Quia. Nihil Et Voluptatem Dolor Blanditiis Sit Harum. Dolore Minima Suscipit Quaerat. Soluta Autem Explicabo Saepe. Recusandae Molestias Et Et Est Impedit Consequuntur. Voluptatum Architecto Enim Nostrum Ut Corrupti Nobis.

您还可以使用strip()之类的内容删除空格,或capitalize()

$ echo "  This iS mY USER ${USER}   " | python3 -c "import sys; print(sys.stdin.read().strip().lower().capitalize())"
This is my user jenkins