在Powershell中正则表达式以删除不需要的字符串

时间:2016-02-20 04:35:08

标签: regex powershell

如何在powershell中编写正则表达式以删除以|开头的任何字符串d | Ref.Doc。 ?

| D|Ref.Doc.  |Row|DocumentNo|CoCd|Pstng Date|Period
| W|100003574 |  3|65697957  |CACS|01/15/2016|     1
| W|100003574 |  3|65697957  |CACS|01/15/2016|     2
| W|100003574 |  3|65697957  |CACS|01/15/2016|     3
| D|Ref.Doc.  |Row|DocumentNo|CoCd|Pstng Date|Period
| W|100003575 |  3|65697957  |CACS|01/15/2016|     1
| W|100003575 |  3|65697957  |CACS|01/15/2016|     2
| W|100003575 |  3|65697957  |CACS|01/15/2016|     3

预期输出

| W|100003574 |  3|65697957  |CACS|01/15/2016|     1
| W|100003574 |  3|65697957  |CACS|01/15/2016|     2
| W|100003574 |  3|65697957  |CACS|01/15/2016|     3
| W|100003575 |  3|65697957  |CACS|01/15/2016|     1
| W|100003575 |  3|65697957  |CACS|01/15/2016|     2
| W|100003575 |  3|65697957  |CACS|01/15/2016|     3

1 个答案:

答案 0 :(得分:1)

试试这个:

Get-Content $path | ? { $_ -notmatch '^\| D\|Ref\.Doc\.' }

请注意,|.需要\进行转义才能被解释为文字
^将正则表达式锚定在每个输入行的 start

但是,正如@PetSerAl在评论中建议的那样,在这种情况下,您可以使用更简单的通配符模式,而不是使用正则表达式

Get-Content $path | ? { $_ -notlike '| D|Ref.Doc.*' }

请注意,?是过滤Where-Object cmdlet的别名。