Powershell非贪婪替换模式

时间:2018-10-31 13:10:48

标签: powershell replace pattern-matching non-greedy

我有一个包含多行的文件,如下例所示,但是我需要模式中提到的字符出现在输出中,换句话说就是非贪婪匹配。

我需要一种方法来删除行的第一部分,并获取以'07'或'08'开头的行以及行中直到行尾的所有内容。

示例:

  • 输入:'从DUAL07.16.0162(B0375,U0847)中选择TZ_OFFSET(SESSIONTIMEZONE)'
    • 输出:07.16.0162(B0375,U0207)
  • 输入:'从DUAL08.15.0162(B03075,U07)中选择TZ_OFFSET(SESSIONTIMEZONE)'
    • 输出:08.15.0162(B08075,U07)

2 个答案:

答案 0 :(得分:1)

这应该有效:

$str = 'SELECT TZ_OFFSET (SESSIONTIMEZONE) FROM DUAL07.16.0162 (B0375, U0847)' 
$str -replace '^.*?DUAL(.*)$','$1'

答案 1 :(得分:0)

New-Variable -Name file -Value "c:\abc.txt" #This file contains the line that needs to be edited
(Get-Content -Path $file) -replace '^.*?DUAL(.*)$','$1'|set-content $file