我需要将引号添加到包含500行文本的文本文件中。 格式不一致。它包含破折号,点,数字和字母。例如
1527c705-839a-4832-9118-54d4Bd6a0c89
16575getfireshot.com.FireShotCaptureWebpage屏幕
3EA2211E.GestetnerDriverUtility
我试图对此进行编码
$Flist = Get-Content "$home\$user\appfiles\out.txt"
$Flist | %{$_ -replace '^(.*?)', '"'}
我得到的结果仅添加到行的开头。
"Microsoft.WinJS.2.0
预期结果应该是
“ Microsoft.WinJS.2.0”
如何在每行的末尾添加引号?
答案 0 :(得分:1)
在您的情况下(需要PSv4 +),无需严格使用正则表达式(正则表达式):
(Get-Content $home\$user\appfiles\out.txt).ForEach({ '"{0}"' -f $_ })
Array method .ForEach()
通过传递给它的脚本块({ ... }
)处理每条输入行。
'"{0}"' -f $_
通过-f
, the string-format operator有效地将每个输入行($_
)括在双引号中。
如果您确实想使用正则表达式:
(Get-Content $home\$user\appfiles\out.txt) -replace '^|$', '"'
正则表达式^|$
与输入字符串的开头(^
)和结尾($
)都匹配,并用"
字符替换两者,从而有效地将输入双引号的字符串。
关于您尝试过的事情:
^(.*?)
仅与字符串(^
)的开始匹配,对于.*?
-由于使用了非贪婪重复符号?
-不匹配。
因此,用"
替换匹配项只会在输入字符串的开始而不是结尾处放置"
。
答案 1 :(得分:0)
您可以使用正则表达式来匹配两者:
^(.*?)
行的开头|
$
行的结尾即^(.*?)|$
$Flist = Get-Content "$home\$user\appfiles\out.txt"
$Flist | %{$_ -replace '^(.*?)|$', '"'}