Windows PowerShell中findstr命令匹配结果异常问题咨询
问题原因
你遇到的问题是因为findstr是CMD原生命令,参数解析遵循CMD规则,而你在PowerShell中传递参数时的转义方式错误,导致CMD把搜索字符串拆成了两个独立匹配项:name": 和 or。findstr默认会匹配包含任意一个项的行,第2行包含name": ,因此被误匹配。
具体拆解:
你写的命令findstr /n /l "\"name`": `"or",PowerShell会先将其中的``"``解析为普通双引号,传递给CMD的参数变成"name": "or。CMD解析时会把"识别为普通双引号,整个参数被解析为"name": "or——第一个双引号开启引号模式,第二个双引号关闭引号模式,findstr实际收到两个搜索字符串:name": (引号内内容)和or(引号后内容)。第2行的{"name": "moish"}包含name": `,因此被命中。
解决方法
方法一:修正转义方式,让CMD识别单个搜索字符串
用单引号包裹搜索字符串(PowerShell不解析单引号内的转义),同时保留CMD的双引号转义符\:type .\input.json | findstr /n /l '\"name\": \"or'或者用PowerShell的反引号``转义双引号,确保CMD收到正确格式:
type .\input.json | findstr /n /l "`\"name`\": `\"or"`方法二:改用PowerShell原生命令,避免跨环境转义问题
使用Select-String直接匹配,更符合PowerShell使用习惯:Get-Content .\input.json | Select-String -Pattern '"name": "or'这个命令只会匹配包含
"name": "or的行,仅输出第3行结果。
内容的提问来源于stack exchange,提问作者OrenIshShalom
相关产品推荐
相关产品推荐

