Powershell中的哪个命令替换了grep -o(它只显示一行的匹配部分而不是整行)? 我尝试使用Select-Object但它总是显示实线。 例如:
下一行
<a id="tm_param1_text1_item_1" class="tm_param1param2_param3 xxx_zzz qqq_rrrr_www_vv_no_empty" >eeee <span id="ttt_xxx_zzz">0</span></a>
使用下一个命令:
cat filename | grep -o '>[0-9]' | grep -o '[0-9]'
输出:0
当我使用Select-Object时,我总能看到整行(
答案 0 :(得分:5)
一种方法是:
$a = '<a id="tm_param1_text1_item_1" class="tm_param1param2_param3 xxx_zzz qqq_rrrr_www_vv_no_empty" >eeee <span id="ttt_xxx_zzz">0</span></a>'
$a -match '>([0-9])<' #returns true and populate the $matches automatic variable
$matches[1] #returns 0
答案 1 :(得分:3)
要在文字中选择字符串,请使用select-string
而不是select-object
。它将返回一个MatchInfo对象。您可以通过查询匹配属性来访问匹配项:
$a = '<a id="tm_param1_text1_item_1" class="tm_param1param2_param3 xxx_zzz qqq_rrrr_www_vv_no_empty" >eeee <span id="ttt_xxx_zzz">0</span></a>'
($a | select-string '>[0-9]').matches[0].value # returns >0
答案 2 :(得分:1)
到目前为止提出的解决方案仅从每一行产生第一个匹配。要完全模拟grep -o
(从每行产生每个匹配)的行为,需要这样的事情:
Get-Content filename | Select-String '>([0-9])' -AllMatches |
Select-Object -Expand Matches | % { $_.Groups[1].Value }
Select-String -AllMatches
返回输入字符串中的所有匹配项。
Select-Object -Expand Matches
“断开”来自同一行的匹配,以便可以通过$_.Groups[1]
选择所有子匹配。如果没有此扩展,则来自第二行匹配的子匹配将为$_.Groups[3]
。
答案 3 :(得分:1)
InPowerShell v3:
sls .\filename -pattern '^[0-9]' -AllMatches | % matches | % value
说明: sls是Select-String的别名。它需要文件名/路径以及模式作为参数。它产生“匹配”
%匹配选择所有匹配,无论文件等。 %值选择每个匹配的值