【问题标题】:Add text to every line in text file using PowerShell使用 PowerShell 将文本添加到文本文件中的每一行
【发布时间】:2018-08-18 13:15:25
【问题描述】:

我想在 .txt 文档的每一行文本的末尾添加字符。

#Define Variables
$a = c:\foobar.txt
$b = get-content $a

#Define Functions
function append-text  
    {  
    foreach-Object  
        {  
        add "*"  
        }  
    }  

#Process Code
$b | append-text

类似的东西。本质上,加载一个给定的文本文件,在该文本文件中每一行文本的末尾添加一个“*”,保存并关闭。

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    没有必要的功能。这样就可以了:

    $b|foreach {$_ +  "*"}
    

    【讨论】:

    • 如果你的手腕在困扰你gc c:\foobar.txt | %{"$_*"}。那是大量使用别名,但我倾向于在命令行中一次性使用 PowerShell,而且我输入的越少,我的手腕就越不讨厌我。 :-)
    • 这绝对有效,但我希望将其保留为函数格式,以便在必要时再次调用它。不过你可能是对的,我在这个脚本上的目标可能是不需要函数。
    【解决方案2】:

    这样的事情应该可以工作:

    function append-text { 
      process{
       foreach-object {$_ + "*"}
        } 
      }
    

    【讨论】:

    • 如果您使用过滤器,则根本不需要 process 块,例如filter Append-Text {"$_*"}
    • 这很好用!是否可以在其中添加冗余检查?可以检查“*”是否存在,如果它不在行尾,则添加它?
    • 当然,filter Append-Text {if ($_ -match '\*\s*$') {$_} else {"$_*"}}
    • 有时人们只是在寻找如何做某事的示例,并提供一个简单的示例以使用它更容易通过其他方法解决,但给他们的问题并不能真正回答他们的问题问。其他时候,给他们另一种方法是“正确”的答案。有时我猜错了。
    • 我认为 Keith 在 '\s*$' 上方的正则表达式不正确。在任何情况下,我都会使用 -like 而不是 -match,即 "$_ -notlike '*`'
    【解决方案3】:
    PS> (gc c:\foobar.txt) -replace '\S+$','$&*'
    

    【讨论】:

      【解决方案4】:

      只用了大约 2 个小时就搞定了,之前从未使用过 Powershell,但现在开始:

      cls
      #Define Functions
      (gc g:\foobar.txt) -replace '\S+$','$& 1GB RAM 1x 1 GB Stick' | out-file "g:\ram 6400s.txt"
      

      更改文件位置。第一个文件是您要编辑的文件。第二个是输出文件。

      【讨论】:

      • 我不明白,为什么是“\S”(非空白)?我认为“。+”将是要走的路。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      相关资源
      最近更新 更多