【发布时间】:2020-03-20 22:54:03
【问题描述】:
如何搜索以查找只有 ~“波浪号”字符的行,然后是不以 ~ 波浪号开头的下一行。
这适用于大型多记录文本文件,通常每个多记录都由仅带有 ~ 波浪号字符的记录分隔(分隔)。我想在文件中找到所有缺少的分隔符。文件中的所有记录都以 CRLF 结尾。
要搜索的示例文本文件。在这个示例文件中,第一个多记录位于第 1 行和第 2 行,然后是波浪号 ~ 分隔符,然后第 4 到 6 行是下一个多记录,然后是第 7 行的另一个 ~ 分隔符。 脚本应该在第 8 行找到错误,因为它应该以 ~ 开头,后跟更多文本(如第 1 行和第 4 行)。
MyTextFile.txt:
~A123~,~800-123-1234~,~800-345-6789~
SAMPLE TEXT HERE
~
~A100~,~800-123-1234~,~800-345-6789~
SAMPLE TEXT HERE
MORE SAMPLE TEXT HERE
~
SAMPLE TEXT HERE
MORE SAMPLE TEXT HERE
以下 PowerShell 代码在下一行“S”中仅使用波浪号后跟第一个字符来查找“值”,但它没有显示行号,我需要这样我可以删除后面的剩余文本~ 线。
当前代码:
$MYFILE = Get-Content MyTextFile.txt -Raw
[regex]$rx="[~]`r`n[^~]"
$rx.Match($MYFILE)
输出:
Groups : {0}
Success : True
Name : 0
Captures : {0}
Index : 136
Length : 4
Value : ~
S
我在 Linux BASH 中有一个工作脚本,但我是 Powershell 新手。
【问题讨论】:
-
我相信你要求
'(?m)^~\r?\n(?!~)',但事实上,如果你想替换的不仅仅是这个匹配,你还需要其他东西。您的预期输出是什么? -
它可以是找到值“S”的整行和行号。所以在我的示例文本文件中,它应该输出“SAMPLE TEXT HERE”行和第 8 行的行号。它不必替换任何内容。只需输出匹配的 REGEX 的行和行号即可。
-
不能输出行号,99.9%的情况下不需要。要匹配
~行之后的行,您可以使用'(?m)(?<=^~\r?\n)[^~].*' -
谢谢。最后一个代码现在匹配并返回整行。也许我可以创建一个计数器来查找匹配的行号?
-
正则表达式不可能,它不知道任何行。
标签: regex powershell