0

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

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

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

我尝试了很多方法,但我被卡住了,因为我不知道如何处理正则表达式中的双引号,或者在“if”或“where”语句中声明过滤器,而不是替换文本......

最新尝试:

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

但不起作用...

我已经阅读了这篇文章和这篇文章,但我不明白如何让这些解决方案满足我的需求..

有人能帮助我吗?

4

2 回答 2

1

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

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

如果您需要用新内容覆盖文本文件,请追加

| Set-Content -Path "e:\file.txt" -Force

到上面。

输出:

...
    “布拉,布拉,布拉”
    https://example.com
    “酒吧,酒吧,酒吧”
...

正则表达式详细信息:

( 匹配下面的正则表达式并将其匹配捕获到反向引用编号 1
   \s 匹配作为“空白字符”的单个字符(空格、制表符、换行符等)
      * 在零次和无限次之间,尽可能多次,按需回馈(贪婪)
)
" 从字面上匹配字符 """
( 匹配下面的正则表达式并将其匹配捕获到反向引用编号 2
   https:从字面上匹配字符“https:”
   [^"] 匹配任何不是“"”的字符
      + 一次到无限次,尽可能多次,按需回馈(贪婪)
)
" 从字面上匹配字符 """
于 2020-05-15T12:46:20.867 回答
0

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

$content = Get-Content PATH TO YOUR FILE

foreach( $line in $content ) {
    if( $line -match "(`"https:\/\/)" ) {
        $line -replace '"',''
    }
}
于 2020-05-15T12:20:59.323 回答