【问题标题】:Replace all text (wildcard) in file with a starting point Publisher=" {GUID} and ending with a "将文件中的所有文本(通配符)替换为起点 Publisher=" {GUID} 并以 " 结尾
【发布时间】:2018-03-20 21:17:32
【问题描述】:

所以每个文件都有一行

Publisher="此处为 GUID"

我想用简单的文本“TEXTHERE”(带引号)替换所有 guid (Powershell)

这是我简化的;

 `

enter code here`$list = Get-ChildItem -Path:'C:\AppOutput\*allfiles.xml*' -Recurse
    $replacestring = 'APPXSIGNCERTIFICATE'
    $appxmltest = 'C:\AppOutput\app.xml'

ForEach ($file in $list)
        {

       (Get-Content $file) -replace "Publisher=""`*", 'Publisher="TEXTHERE"' | Set-Content     c:\test2.xml
       }

它仅将 Publisher=" 替换为 Publisher="TEXTHERE"{GUID}"

有什么建议吗?

我试图找到一种方法来告诉它 Publisher=" 开始,以及介于它和下一个 " 之间的所有内容

【问题讨论】:

    标签: powershell


    【解决方案1】:

    -replace 使用正则表达式来匹配它应该替换的文本,所以试试这样的:

    -replace '(?<=Publisher=").*?(?=")', 'TEXTHERE'
    

    【讨论】:

    • 谢谢!!!这两个答案都有效!我将不得不更多地阅读正则表达式才能完全理解它,但你们帮助了很多
    • Np。第一部分(?&lt;=something) 是一个前瞻,它试图在你正在寻找的东西之前找到一些东西。 (?=something) 是一个lookbehind,它在你的目标之后寻找一些东西。 .*? 查找所有(*) 个字符(.),并带有一个惰性(?) 标记以尽快停止它。我添加了惰性选项来避免它会超过第一个双引号的情况(我希望在后面查看)。我不确定这是否更清楚,但我试过了,呵呵:P 圣诞快乐
    • 完全如此,所以 (?
    • 正确。 ` is only needed to escape special-characters in regex, like .`(任何字符)。如果你想要一个 puntuaction,你需要像 \. 一样逃避它。
    【解决方案2】:

    看起来您尝试对匹配参数使用通配符语法。 -replace 需要一个正则表达式。

    试试这个:

    (Get-Content $file) -replace 'Publisher=".*?"', 'Publisher="TEXTHERE"' | Set-Content c:\test2.xml
    

    见:

    get-help about_regular_expressions
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-11
      • 2017-01-10
      • 2016-04-05
      • 2010-10-18
      • 2011-01-13
      • 2011-03-21
      • 1970-01-01
      相关资源
      最近更新 更多