我正在尝试查看文件中是否有某个输入的条目,所以我使用正则表达式来查询每一行:
cat $file | where {$_ -match "^script\$fileName -*"}
其中$ fileName是在别处定义的输入。
如何更改正则表达式以插入变量而不是匹配'$ fileName'?
答案 0 :(得分:9)
除了给出的答案,因为$ fileName可能包含诸如'。'之类的字符。或'\'你应该逃避它如下:
cat $file | where {$_ -match "^script\\$([regex]::Escape($fileName)) -*"}
Escape方法将转义像“。”这样的位。和'\'为你。
E.g。
[regex]::Escape(".\bar.txt")
给出
\.\\bar\.txt
答案 1 :(得分:3)
$fileName
进行插值,以便最后将一个字符串传递给正则表达式,如下所示:
cat $file | where {$_ -match "^script\foo.txt -*"}
\
充当后续角色的转义字符,而实际上我们想要一个{nn} \
来匹配。在这种情况下,您需要转义转义字符,例如:
cat $file | where {$_ -match "^script\\$fileName -*"}
答案 2 :(得分:0)
还可以将RegEx分解到powershell内部。
LDAP_MATCHING_RULE_IN_CHAIN
更具可读性,并且适用于变量带有方括号df2 <- df1[-which(duplicated(df1$PCODE)),]
df3 <- aggregate(df2,list(df2$PRODUCT),FUN = length)
df3 <- df3[which(df3$PRODUCT <3),]
result <- df3[1]
$fileName = 'test'
'^script\test-*' -match ('\^script\\' + $fileName + '-*')