powershell - 如何连接正则表达式匹配和不带空格或其他字符的字符串变量?
问题描述
我想在 Powershell 的文件中用正则表达式替换日期。需要保留所有空白:
#define BUILD_DATE 20181010
当前日期是一个变量:
[string]$Today = Get-Date -UFormat "%Y%m%d"
在替换表达式中使用匹配时,我学会了使用反引号:
(Get-Content $ItemFullPath) |
Foreach-Object { $_ -replace "(#define\s+?BUILD_DATE\s+?)\S+", "`$1$Today" } |
Set-Content $ItemFullPath
但这会导致:
#define BUILD_DATE $Today
我不能在这里添加另一个空格字符。该文件的其他读取器和写入器希望存在相同的空白。
解决方案
使用大括号,以便 PowerShell 和正则表达式引擎不会混淆一个变量/反向引用的结束位置和另一个开始的位置。此外,ForEach-Object
这里不需要 ,因为-replace
运算符作为枚举器工作,因此可以直接用于数组。
(Get-Content $ItemFullPath) -replace "(#define\s+?BUILD_DATE\s+?)\S+", "`${1}$Today" } |
Set-Content $ItemFullPath
推荐阅读
- php - 从 wp-config 禁用后仍然显示 wordpress 调试通知
- arrays - 将数组作为查询字符串参数传递 node.js
- android - Android studio:根据 json 数组中的值动态构建 sqlite 选择查询
- pyspark - 使用列值作为文件名来保存 spark 数据框
- python - 根据像素的颜色生成 RGB 图像的布尔蒙版的最 Pythonic 方法是什么?
- assembly - 如何通过 C 在 ARM 程序集中定义全局标签?
- c# - FluentValidation - 验证列表中的字符串
- sql - 使用 SQL 检查 IP 地址并将其映射到子网查找表
- spring-boot - 使用 java 将数据从 Aws DynamoDB 索引到 elasticssearch 云
- reactjs - 为什么 NGINX 不能用正确的 css 和 js 文件加载我的反应应用程序