我需要一个任何语言的脚本来大写文件中每个单词的第一个字母。
感谢所有答案。
Stackoverflow摇滚!
答案 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