我需要将引号添加到包含 500 行文本的文本文件中。 格式不一致。它有破折号、点、数字和字母。例如
1527c705-839a-4832-9118-54d4Bd6a0c89
16575getfireshot.com.FireShotCaptureWebpageScreens
3EA2211E.GestetnerDriverUtility
我尝试过编写这个代码
$Flist = Get-Content "$home\$user\appfiles\out.txt"
$Flist | %{$_ -replace '^(.*?)', '"'}
我得到的结果仅添加到行的开头。
"Microsoft.WinJS.2.0
预期结果应该是
“Microsoft.WinJS.2.0”
How to add quotation-mark to the end of each line as well?
最佳答案
在您的情况下并不严格需要使用 regex(正则表达式)(需要 PSv4+):
(Get-Content $home\$user\appfiles\out.txt).ForEach({ '"{0}"' -f $_ })
Array method
.ForEach()
通过传递给它的脚本 block ({ ... }
) 处理每个输入行。'"{0}"' -f $_
通过-f
, the string-format operator 有效地将每个输入行 ($_
) 用双引号引起来.
如果您确实想使用正则表达式:
(Get-Content $home\$user\appfiles\out.txt) -replace '^|$', '"'
Regex ^|$
匹配输入字符串的开头 (^
) 和结尾 ($
),并将两者替换为"
字符,有效地将输入字符串括在双引号中。
至于你尝试过的:
^(.*?)
仅匹配字符串的开头 (^
),没有其他内容,因为 .*?
- 由于使用非贪婪重复符号?
- 不匹配任何其他内容。
因此,替换与 "
匹配的内容只会在输入字符串的开头放置一个 "
,而不是在结尾。
关于powershell - 向文本文件添加引号 powershell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59258771/