如果我有一个包含任何文本的文件,我怎样才能仅打印文件中每个单词的首字母,然后以大写字母打印所有元音?
答案1
我想这对于 PowerShell 初学者来说可能会有点棘手。
$poem = Get-Content "C:\somewhere\poem.txt"
$x = (($poem.Split(' ') | % { $_[0] }) -join "").ToUpper()
输出:
PS C:\Users\xy> $x
ISHAFSSCLYIAWNDIAHYTAAASYORFASMOMLWFCLEIPKHSBR
解释:
$poem.split(" ")
断开$poem
每条皮带上的整根绳子并为每个单词创建一个对象。| %
别名获取每个对象并为每个对象ForEach
执行脚本块。{}
$_[0]
选择当前对象的第一个字母
现在将返回一个对象数组,而不是一个简单的字符串。
-join ""
将这些对象放在一起形成一个字符串。里面的值""
定义了每个对象之间写的内容,在我们的例子中什么都没有。.ToUpper()
是一种将字符串中的每个字母变为大写字母的方法。
答案2
我本想评论一下,但仍然不够。缺少元音部分。我首先想到了一个数组 -contains,但 -cmatch 更简单。同一首诗又回到了这里:
$poem = Get-Content ".\cwItc.txt"
$x = (($poem.Split(' ') | % {
If ($_[0] -cmatch "[aeiou]") {$_[0].ToUpper} else {$_[0]}
} ) -join "" )
$x
> .\FirstLetterVow2up.ps1
IshfssclywndIhytsyrFsmmlwfcLIpkhsbrNwjhIftdBdwtpIsttcIcbttrpIkItsthtIwtIwpt
whrcsAtAMwnswltdSIwcnpwtWIdwtmfIttfbmwhhbIwlcthtppMmfwchfwlHtpmwtTlpgddmfIp
hswfldHctlvstlmHwwbhwhmpSttnsssIwcbvdlsprTgmldmptmbsIctsscbwrsfWttdhmwfdHwd
wvcIbftpshbAttthdlmSlnIscfsThmnlmtkWsctwpnImgrtcbnrImhtssgbmncBIktttdshwImh
tpthsmttsAhcmdttcImhtkhbtcwcIhftwptglIcctptwIsBIcftpcwtcWsdysmtsEswwkpEhttw
ntrIlsrmfStllftkDdwsbmtbTddnjtrFwdhtwwcrtbSh