【问题标题】:Why does the regex-pattern \r\n(?=$) not work in powershell? [duplicate]为什么正则表达式模式 \r\n(?=$) 在 powershell 中不起作用? [复制]
【发布时间】:2020-09-01 15:39:34
【问题描述】:

我有一个文本文件,我想删除该文件中的最后一个换行符:
Text


在 Powershell 中使用以下正则表达式:

(Get-Content .\test.txt -Raw) -replace ('\r\n(?=$)', '') | Set-Content .\test.txt

但这不起作用。

我已尝试将正则表达式模式:\r\n(?=$) 在 Notepad++ 和 Java 中替换为 '' 并且它正在工作。

我怎样才能让它在 Powershell 中工作?

【问题讨论】:

  • 你为什么不直接string.Trim()呢?
  • Get-Content 已经在\r?\n 上拆分,因此您正在操作的输出实际上不会包含换行符。听起来你想要...|Set-Content -NoNewline 虽然
  • @MathiasR.Jessen -NoNewline 开关完全符合我的要求。
  • @MathiasR.Jessen 但我不明白你的第一点,因为当我尝试用('\r\n', '') 替换所有换行符时,它会完成除了最后一个换行符之外的工作。所以我认为-Raw 开关确实通过将换行符放入字符串来忽略换行符,但保留它并使其可用于正则表达式。所以最后为什么('\r\n(?=$) 不起作用的问题对我来说仍然存在。你能解释一下吗?
  • -replace 可以很好地删除换行符,但 Set-Content 会在后面追加一个尾随行结束序列。

标签: regex powershell regex-lookarounds


【解决方案1】:

您需要将 EOL 转换为适当的格式。 Linux 和 Dos 的行尾参数不同,JSON 使用 Linux'。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2014-03-08
    • 2013-01-18
    • 2015-04-13
    相关资源
    最近更新 更多