powershell就地删除文本文件中的双引号,其中行以双引号+其他文本开头

问题描述 投票:0回答:2

仅当行以“ https”开头时,我才需要删除文本文件中的双引号。文件内容是这样的:

...
    "bla, bla, bla"
    "https://example.com"
    "bar, bar, bar"
...

我必须匹配“ https://example.com”,删除两个双引号,将双引号留在其他行中,而不是设置内容...

我已经尝试了很多方法,但是由于我不知道如何在正则表达式中处理双引号,或者在“ if”或“ where”语句中声明过滤器,而不是在原处替换文本,我陷入了困境...

最新尝试:

$TextFile = Get-Content "e:\file.txt"
foreach ($Line in $TextFile) {if ($Line.StartsWith('"https')) { $line.trim('"')} | Set-Content $TextFile

但不起作用...

我已经阅读了thisthis,但我不知道如何使这些解决方案适合我的需求。

有人可以帮我吗?

powershell escaping double-quotes regexp-replace edit-in-place
2个回答
0
投票

要获取不带双引号的'https://'字符串:

$content = Get-Content PATH TO YOUR FILE

foreach( $line in $content ) {
    if( $line -match "(`"https:\/\/)" ) {
        $line -replace '"',''
    }
}

0
投票

使用-Raw开关以单个字符串形式读取文本文件,然后进行正则表达式替换:

(Get-Content "e:\file.txt" -Raw) -replace '(\s*)"(https:[^"]+)"','$1$2'

输出:

...“ bla,bla,bla”https://example.com“吧,吧,吧”...

正则表达式详细信息:

(匹配下面的正则表达式,并将其匹配捕获到反向引用1中\ s匹配单个字符,即“空白字符”(空格,制表符,换行符等)*在零次到无限次之间,尽可能地多次,并根据需要进行回馈(贪婪))“从字面上匹配字符“””(匹配下面的正则表达式,并将其匹配捕获到反向引用2中https:按原样匹配字符“ https:”[^“]匹配任何非“”的字符+一次至无限次,尽可能多次,并根据需要进行回馈(贪婪))“从字面上匹配字符“””
© www.soinside.com 2019 - 2024. All rights reserved.