【问题标题】:Replacing tabs, newspace, whitespace in powershell and calculate SHA1 for that file?替换powershell中的制表符,新空格,空格并计算该文件的SHA1?
【发布时间】:2021-08-01 08:14:31
【问题描述】:

我正在尝试开发一个 Powershell 脚本,它应该:

  • 获取文件内容。
  • 删除该文件的空格、换行符、制表符。
  • 计算 SHA1。

这是我尝试过的代码,但无法正常工作,因为它为我提供了带有空格、换行符和制表符的文件的 SHA1:

$File = "C:\MyThirdProject\jpc_flt.txt"
$TargetFile = "C:\MyThirdProject\flttest.txt"
$lines=(Get-Content $File)
$TrimLine = foreach ($line in $lines) { $line.Trim(" `t`n`r") } ##Have tried -->$TrimLine=(Get-Content -LiteralPath $File) | foreach{ $_.Trim(" `t`n`r")} | Set-Content $TargetFile
$TrimLine | Out-File $TargetFile
Get-FileHash -Path $TargetFile -Algorithm SHA1 

我愿意接受其他方法或任何其他已经执行此操作的 cmdlet。请帮忙!

【问题讨论】:

  • 你可以简单地做$newFile=(Get-Content $File -Raw) -replace '\s+'
  • .Trim() 方法将删除字符串开头和结尾的内容,但不会删除中间的内容。这是你的意图吗?如果您想删除所有空格,您可以按照 Santiago 的建议进行操作。
  • 假设您想删除所有 extra 空格,您可以这样做$newFile=(Get-Content $File -Raw) -replace '\s{2,}'
  • 请允许我给你一个标准的建议给新手:如果你accept 一个答案,你将帮助未来的读者,向他们展示解决了你的问题的方法。要接受答案,请单击答案左侧大数字下方的大 ✓ 符号(您将获得 2 点声望)。如果您至少有 15 个声望点,您还可以投票给其他有用的答案(也可以选择接受的答案)。如果您的问题尚未解决,请提供反馈,或者,如果您自己找到了解决方案,请self-answer

标签: powershell powershell-2.0 powershell-3.0 powershell-4.0


【解决方案1】:

tl;dr

Set-Content -LiteralPath $TargetFile -NoNewLine -Value (
  (Get-Content -Raw -LiteralPath $File) -replace '\s+'
)

Get-FileHash -LiteralPath $TargetFile -Algorithm SHA1

注意-Raw (PSv3+) 和-NoNewLine (PSv5+) 的使用。


至于你尝试了什么

$lines=(Get-Content $File)

使用Get-Content 将目标文件的内容作为行数组返回。 (相比之下,使用-Raw 会将文件作为一个整体读入单个多行字符串。

$TrimLine | Out-File $TargetFile

Out-FileSet-Content 默认情况下会使用一个 - 适合平台的 - 换行符来终止每个(字符串化的)输入对象。 (相比之下,-NoNewLine 在任何输入对象之间放置 no 分隔符;对于单个多行输入字符串,这意味着没有附加尾随换行符。)

【讨论】:

    猜你喜欢
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多