我使用powershell使用正则表达式过滤文本文件。为此,我使用以下命令:Select-String -Pattern "^[0-9]{2}[A-Z]{2}[a-z]{5}" -CaseSensitive rockyou.txt > filter.txt
然而,问题是,当将它们写入filter.txt时,它会在匹配的字符串之前加上原始文件的名称和行号,例如:
rockyou.txt:12345:abcdefg
rockyou.txt:12345:abcdefg
rockyou.txt:12345:abcdefg
我怎样才能使它忽略行号?
Select-String
为每个匹配输出一个对象,每个对象都有一个Line
属性,其中包含发生匹配的原始行。您只能获取Line
值,如下所示:
... |Select-String ... |Select-Object -ExpandProperty Line |Out-File filter.txt
这种方式似乎有效。Set content保存matchinfo对象的字符串版本,没有任何额外的空行,而不是out file或">"。
get-content rockyou.txt | select-string '^[0-9]{2}[A-Z]{2}[a-z]{5}' -ca |
set-content filter.txt
get-content filter.txt
01ABcdefg
我突然想到你可能仍然想要文件名:
select-string '^[0-9]{2}[A-Z]{2}[a-z]{5}' rockyou.txt -ca |
% { $_.filename + ':' + $_.line } > filter.txt
cat filter.txt
rockyou.txt:01ABcdefg