在Powershell脚本中翻译逻辑

时间:2013-10-29 17:00:38

标签: powershell syntax scripting

有关背景信息,请查看this SO post。

完整的脚本:

(get-content file.txt -ReadCount 0) -replace '([^,]")"','$1' | set-content newfile.txt

我特意在脚本的这一部分中寻找逻辑的翻译:

'([^,]")"','$1' |

有人可以解释一下逻辑/语法,还是指出我正确的方向?

3 个答案:

答案 0 :(得分:3)

'([^,]")"'是一个正则表达式,匹配除逗号后跟两个连续双引号的任何字符。括号分组第一个字符和第一个双引号。

'$1'是对匹配中组的反向引用,在替换中意味着“仅用第一组替换匹配”,例如在字符串foo""bar中,序列o""将仅替换为o",从而删除第二个双引号。

|是一个管道,可将替换结果提供给管道中的下一个cmdlet(Set-Content newfile.txt)。

答案 1 :(得分:2)

'([^,]")"','$1'

让我们将其分为正则表达式'([^,]")"'和替换文本'$1'两部分。正则表达式模式中的()创建一个未命名的捕获组,通过$1在替换文本中引用,即它是第一个(并且仅在此情况下)一组parens。什么是匹配&在此捕获组中捕获的是除逗号之后的任何字符,后跟双引号,后面还有捕获组之外的另一个双引号。因此,它会删除两个连续双引号中的一个,除非第一个以逗号开头。

答案 2 :(得分:1)

^符号匹配字符串的开头 很好的参考herehere很好地解释了一切 Power shell here中的Regex简介。

当^符号出现在方括号[]中时,它将匹配任何不包括胡萝卜后面的内容