在PowerShell中无法转义管道符(|)

4

我正在尝试找到一个文件中每行的管道符(|)字符数量。我使用以下命令来实现:

gc .\test.txt | % { ($_ | select-string "|" -all).matches | measure | select count }

它不计算管道符号。

我也尝试了

  1. `|
  2. '|'
  3.  |

有人能告诉我如何在PowerShell中转义管道字符吗?

如果我使用除管道外的字符串或字符,命令就可以正常工作。

2个回答

7

反斜杠\是正则表达式的转义字符。

gc .\test.txt | % { ($_ | select-string "\|" -all).matches | measure | select count }

如果您不确定,您可以始终使用[RegEx] :: Escape()
$pattern = [RegEx]::Escape("|")
gc .\test.txt | % { ($_ | select-string $pattern -all).matches | measure | select count }

在PowerShell中,管道符号在字符串内部不需要进行转义。


5
使用 -SimpleMatch 参数进行 Select-String 命令,这将关闭正则表达式匹配。

我认为这是针对这个使用场景的正确选择,但我会保留我的答案以供参考。 - briantist
我尝试使用-SimpleMatch,但是它的计数为0,尽管我的文件包含了管道字符。我尝试使用|、' | '和"|"命令。 gc .\test.txt | % {($_ | select-string -SimpleMatch "|" -all).matches | measure | select count} - Rajeev
1
当使用 SimpleMatch 时,您不会在 Matches 属性中得到任何内容(因为它不是正则表达式匹配)。在这种情况下,请使用 briantist 的答案。 - Joey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接