字符串方法是什么
PowerShell 里的字符串是 .NET String 对象,可以直接调用 Split/Trim/Replace/Substring/ToUpper 等方法做精确处理。相比 -split、-replace 这类运算符,方法调用不经过正则解析,遇到 . 、$ 、[ ] 之类元字符不会误伤,解析命令输出与日志行时更可控。代价是方法只作用于单个字符串,对数组要自己循环或改用运算符。
基本信息
| 适用平台 | PowerShell 5.1 / 7.x,Windows 与跨平台均可用 |
|---|---|
| 常用方法 | $s.Split(分隔符);$s.Trim();$s.Replace(旧,新);$s.Substring(起,长) |
| 关键区别 | Replace 是字面替换,-replace 是正则替换(后者对所有元素生效) |
| 返回值 | 绝大多数方法返回新字符串,原字符串不变 |
| 配套方法 | ToUpper/ToLower、StartsWith/EndsWith、Contains、IndexOf |
| 常用运算符 | -split、-replace、-join、-like(支持通配符) |
典型使用场景
- 解析 netstat、ipconfig 等命令输出,按分隔符取字段
- 清理从 CSV 或文件读进来的行首行尾空白与不可见字符
- 把路径或版本号按固定位置截取片段
- 批量替换配置里的占位符,且内容含正则元字符
- 判断字符串是否以某前缀开头、包含某关键字
- 把多行输出按固定分隔符拆解成结构化对象供后续统计
常用示例
常用示例
$line = ' 8080: LISTENING '
$line.Trim().Split(':')[0] # 去空白后取端口号
'abcabc'.Replace('a','x') # 字面替换,结果 xbcxbc
'D:\app\log\a.log'.Substring(9) # 从第 9 位起取到结尾,得到 a.log
$s = '10.20.30.40'; $s.Split('.')[-1] # 按点拆分后取最后一段
'ERROR: disk full' -split ':\s*' # 运算符版:按冒号加空白拆
'a,b,,c'.Split(',') | Where-Object { $_ } # 过滤拆分出的空元素
$path = 'C:\data\report.csv'; [IO.Path]::GetFileNameWithoutExtension($path) # 更稳的取文件名常用方法对照
| 方法 | 作用 | 易错点 |
|---|---|---|
| Split() | 按字符或字符串拆分 | 传单个字符串时按整串拆,传字符数组时按任一字符拆 |
| Trim() | 去掉首尾空白 | 只处理两端,中间空白要用 Replace |
| Replace() | 字面替换全部匹配 | 大小写敏感,不支持通配 |
| Substring() | 按起始位置和长度截取 | 越界抛异常,先判 Length |
字符串不可变:每次 Trim/Replace 都产生新对象,循环里反复拼接大字符串应改用 -join 或 StringBuilder,否则性能明显下降。取文件名、扩展名这类需求优先用 [IO.Path] 的方法,比手工截取更不容易出错。
方法对数组不生效:对字符串数组调用 .Trim() 在 PowerShell 5.1 会报错,PowerShell 7 支持成员枚举可直接用。要兼容旧版本就写 $arr | ForEach-Object { $_.Trim() }。