PowerShell实现含下划线字符串首尾字符缩写处理需求
解决方案
先直接上可运行的PowerShell脚本,后面给你拆解开讲每一步:
# 读取Text.txt的全部内容,拆成单个单词的数组 $content = Get-Content -Path "Text.txt" -Raw $words = $content -split '\s+' # 逐个处理每个单词 $processedWords = foreach ($word in $words) { if ($word -match '_') { # 把带下划线的单词拆成小部分 $parts = $word -split '_' # 每个小部分取首字符+最后一个字符 $processedParts = $parts | ForEach-Object { $_.Substring(0, 1) + $_.Substring($_.Length - 1, 1) } # 用下划线把处理后的小部分拼回去 $processedParts -join '_' } else { # 不带下划线的直接留着 $word } } # 输出处理后的结果 $processedWords -join ' '
逐行解释(新手友好版)
- 读取文件:
Get-Content -Path "Text.txt" -Raw把整个文件内容读成一个字符串,-split '\s+'把内容按任意数量的空格拆成单独的单词,存到$words数组里。 - 循环处理每个单词:
- 用
if ($word -match '_')判断当前单词有没有下划线; - 有下划线的话,先用
-split '_'把单词拆成多个小片段(比如sometext4_sometext5_sometext6会拆成sometext4、sometext5、sometext6); - 对每个小片段,
Substring(0,1)取第一个字符,Substring($_.Length -1,1)取最后一个字符,拼在一起; - 再用
-join '_'把这些处理后的小片段用下划线连起来,就得到s4_s5_s6这种结果; - 没有下划线的单词直接原封不动保留。
- 用
- 输出结果:把处理后的所有单词用空格连起来,直接打印到控制台。如果要把结果存回新文件,加一行:
$processedWords -join ' ' | Set-Content -Path "处理后的文件.txt"
测试效果
你的Text.txt内容是:
sometext1 sometext2 sometext3 sometext4_sometext5_sometext6 sometext7 sometext8 sometext9_sometext10 sometext11
运行脚本后,输出就是你要的:
sometext1 sometext2 sometext3 s4_s5_s6 sometext7 sometext8 s9_s0 sometext11
内容的提问来源于stack exchange,提问作者Honza
相关产品推荐
相关产品推荐

