使用 PowerShell 或批处理返回文件中内容的完全匹配

使用 PowerShell 或批处理返回文件中内容的完全匹配

这是我的 powershell 脚本:

$Apache_port = Get-Content -Path C:\tmp\httpd.conf | Select-String -Pattern 'Listen'
echo $Apache_port

但我得到的结果如下:

# Listen: Allows you to bind Apache to specific IP addresses and/or
# Change this to Listen on specific IP addresses as shown below to
#Listen 12.34.56.78:80
Listen 8020 

但我只想8020打印这一行,我该怎么办?

答案1

where-object以下是使用、-match-notmatch和 的PowerShell 方法split()

这将省略带有井号/磅号符号的行#,在默认空格处进行拆分,并返回第二个索引值(即数字)。如“ Listen<space><PortNumber>”中所示,其中“Listen”是第一个索引[0],端口号是您想要的第二个索引[1]

电源外壳

(Get-Content -Path C:\tmp\httpd.conf | Where-Object {$_ -match "Listen" -and $_ -notmatch "#"}).Split()[1];

输出

8020

支持资源

  • 哪里对象

    过滤来自管道的输入,控制哪些对象将沿着命令管道传递。

  • 关于比较运算符

    -match- 字符串与正则表达式模式匹配

    -notmatch- 字符串与正则表达式模式不匹配

  • 分裂()

    钥匙

    strSeparator 用于分割每个字符串的字符,默认为空格(空格/换行符/制表符)

答案2

请尝试以下操作:

$Apache_port = Get-Content -Path C:\tmp\httpd.conf | Select-String -Pattern '8020'
$Apache_port = $Apache_port -Replace "Listen ",""
echo $Apache_port

相关内容