简体   繁体   English

在文本文件中搜索和替换-使用RegEx变量模式

[英]Search & Replace in Text files - With a RegEx Variable Pattern

I am trying to replace a string in each file lets call the string XXX I would like to replace it with the regex pattern variable text found between Start and END 我试图替换每个文件中的字符串,让它调用字符串XXX,我想用在开始和结束之间找到的正则表达式模式变量文本替换它

Currently it simply replaces the word, and then just does not replace. 当前,它仅替换单词,然后不替换。

$Pat1 = [regex]  '(START)*(END)'      # Find Variable between these 2 first

Get-ChildItem * -Recurse | Where-Object {
    $_.Attributes -ne "Directory"
} | ForEach-Object {
    (Get-Content $_) -replace "XXX","$Pat1" | Set-Content -path $_
}

Example Text Below 下面的示例文本

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor坐下,一直保持着安静的状态。 Quisque porttitor augue quis urna suscipit lobortis. Quisque porttitor augue quis urna suscipit lobortis。 Cras eu magna sem. Cras eu magna sem。 Quisque dictum feugiat convallis. Quisque dictum feugiat convallis。

START File Name 1 END Lorem ipsum dolor sit amet, consectetur adipiscing elit. START 文件名1 END Lorem ipsum dolor坐下,安全提示。 Quisque porttitor augue quis urna suscipit lobortis. Quisque porttitor augue quis urna suscipit lobortis。 Cras eu magna sem. Cras eu magna sem。 Quisque dictum feugiat convallis. Quisque dictum feugiat convallis。

XXX Vestibulum risus quam, volutpat iaculis ipsum in, vehicula dictum urna. XXX Vestibulum risus quam,volutpat iaculis ipsum,vehicula dictum urna。 Suspendisse dui tortor, faucibus et tellus vitae, malesuada consequat velit. Suspendisse dui tortor,faucibus ettellus vitae,malesuada velit。

================================= ================================

The question is very unclear, but I'm guessing that you want to replace XXX with the value between START and END in the file and the not regex-pattern itself. 这个问题还不清楚,但是我猜想您想用文件中STARTEND之间的值替换XXX ,而不是正则表达式模式本身。 If so, try this: 如果是这样,请尝试以下操作:

$Pat1 = [regex]  'START(.*?)END'      #Find Variable between these 2 first

Get-ChildItem * -Recurse  | Where-Object { -not $_.PSIsContainer } |
ForEach-Object {
    $text = (Get-Content $_ -Raw)
    $value = [regex]::Match($text, $Pat1).Groups[1].Value
    $text -replace "XXX",$value | Set-Content -path $_
}

Be aware the -replace works like 'text' -replace 'regex-pattern', 'stringvalue' The right value does not accept a regex-pattern, but only a string (which may include $0 , $1 etc. to add the full match, captured group 1 etc.) 请注意, -replace工作方式类似于'text' -replace 'regex-pattern', 'stringvalue'正确的值不接受regex-pattern,而仅接受字符串(其中可以包括$0$1等,以添加完整匹配项) ,捕获的第1组等)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM