正则表达式用Powershell替换引号

时间:2013-02-19 20:11:28

标签: regex powershell

我正在编辑一些网络日志文件,我想删除某些字段中的双引号,但不是全部。

例如,在以下行中,我想从IP地址和server.domain.com中删除双引号,但保留其余内容。

2013-02-18 21:47:46.636 POST /Path/page.html - - "173.194.79.106" "Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.296)" - "server.domain.com" 200 1079 15

我循环使用Foreach-Object

加载每一行的文件

我可以通过以下方式获取IP地址周围没有引号的行:

[regex]::replace($_,"`"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})`"", '$1')

所以我尝试使用以下内容对server.domain.com项目执行相同的操作:

[regex]::replace($_,"`"[a-zA-Z]*\.[dD][oO][mM][aA][iI][nN]\.[cC][oO][mM]`"",'$1')

我的结果是:

2013-02-18 21:47:46.636 POST /Path/page.html - - "173.194.79.106" "Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.296)" - $1 200 1079 15

我做错了什么?

1 个答案:

答案 0 :(得分:0)

添加括号并使用(?i)表示不区分大小写:

[regex]::replace( $_, "(?i)`"([a-z]*\.domain\.com)`"", '‌​$1' )

或者,您可以使用-replace,因为默认情况下不区分大小写

$_ -replace "`"([a-z]*\.domain\.com)`"", '$1'