PowerShell中如何获取文件中指定内容的行号?
解决提取包含特定内容的行号问题
看起来你在尝试用PowerShell提取things.txt里包含"Mustard"的行号,但之前的代码没达到预期,我来帮你梳理一下问题所在,再给出正确的解法。
为什么你的代码返回空值?
你用了Select-String的-context 0,1参数,这个参数的作用是获取匹配行的上下文内容(这里是匹配行之后的1行),而不是获取行号。之后你访问$linenumber.context,如果匹配行是文件的最后一行,context.PostContext(后面的行)就会是空的,所以整个context看起来没有内容——但这根本不是你要的行号信息呀。
正确提取行号的方法
Select-String返回的MatchInfo对象本身就带有LineNumber属性,直接提取这个属性就可以得到行号:
方法1:只输出行号
$search = "Mustard" Get-Content things.txt | Select-String $search | ForEach-Object { $_.LineNumber }
运行这段代码后,会输出所有包含"Mustard"的行的行号(比如你的例子里应该是2和4)。
方法2:同时输出行号和对应行内容
如果需要同时看到行号和匹配的内容,可以用Select-Object来筛选相关属性:
$search = "Mustard" Get-Content things.txt | Select-String $search | Select-Object LineNumber, Line
额外说明
如果你的things.txt其实是所有单词在同一行(而不是每行一个单词),那Select-String会把整个内容当作第1行,这时候行号只会返回1。如果是这种情况,你可能需要的是单词在该行中的位置,而不是行号——不过从你的描述来看,应该是每行一个单词的多行文件,上面的方法完全适用。
内容的提问来源于stack exchange,提问作者Spina97
相关产品推荐
相关产品推荐

