找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 14836|回复: 2

[问题求助] PowerShell把单独一行中的-替换成+

[复制链接]
发表于 2022-11-21 21:58:21 | 显示全部楼层 |阅读模式
把单独一行中的-替换成+ 下面的代码没有效果
  1. $s = @'
  2. Key 1
  3. -
  4. Hello 1
  5. World 1
  6. ---
  7. Key 2
  8. -
  9. Hello 2

  10. World 2
  11. ---
  12. Key 3
  13. -
  14. Hello 3
  15. World 3
  16. '@

  17. $s -replace '(?m)^-$', '+'
复制代码
下面把单独ab一行的替换也不灵
  1. cls
  2. $s = @'
  3. Key 1
  4. ab
  5. Hello 1
  6. World 1
  7. ab cd
  8. '@

  9. $s -replace '(?m)^ab$', '+'
复制代码
发表于 2022-11-21 22:54:58 | 显示全部楼层
https://learn.microsoft.com/zh-c ... ions#multiline-mode
默认情况下,$ 仅与输入字符串的末尾匹配。 如果指定了 RegexOptions.Multiline 选项,它将与换行符 (\n) 或输入字符串的末尾匹配。 但是,它并不与回车符/换行符的组合匹配。 若要成功匹配它们,使用子表达式 \r?$ 只替代 $。
  1. $s -replace '(?m)^ab\r?$', '+'
复制代码
或者
  1. $s -replace '(?m)^ab(?=\r?\n|$)', '+'
复制代码
在PowerShell脚本中,行尾为\r\n,$不能匹配\r,只匹配\n,所以失败。
在PowerShell控制台,行尾为\n,$可以成功匹配。

评分

参与人数 1技术 +1 收起 理由
小白龙 + 1 666

查看全部评分

 楼主| 发表于 2022-11-21 23:02:09 | 显示全部楼层
回复 2# WHY


   多谢大佬
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:45 , Processed in 0.018157 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表