【问题标题】:Powershell Regex: Replace only multiple spaces with tabsPowershell Regex:仅用制表符替换多个空格
【发布时间】:2013-06-10 22:05:15
【问题描述】:

这是一个 Powershell 问题,类似于在这个 C# 问题中提出的问题: C# Question Link

我在一个可变长度的文本文件中有固定宽度的列数据,所以我想用制表符分隔数据。为此,我想使用 Powershell 读取文件,使用 Regex 表达式仅用制表符替换多个空格,保持行尾完整并将其输出到临时文件。然后我将它重命名为原来的。

我在网上搜索过,似乎只能找到零碎的东西。对此的任何帮助将不胜感激!

【问题讨论】:

    标签: regex powershell


    【解决方案1】:
    1. 获取内容

      $content = [IO.File]::ReadAllText('foo.txt')
      
    2. 用一个制表符替换至少两个空格:

      $content = $content -replace ' {2,}', "`t"
      
    3. 写回文件

      [IO.File]::WriteAllText('footab.txt', $contents)
      

    【讨论】:

    • 首先,谢谢!那速度太快了!另外,$utf8 语句添加了什么,在普通的 ole ASCII 文件上是否有必要?再次感谢您!
    • 它只是指定输出应该写为没有 BOM 的 UTF-8。我认为,如果它只是 ASCII,你可以省略它。事实上,如果没有 encoding 参数,该方法正是这样做的,因此在任何一种情况下都没有必要。
    • 太棒了!现在我将把它合并到一个 VBA shell 调用中,所以我不必离开我的 Excel 宏 :) 在 VBA 中执行此操作将需要更多的代码行!再次感谢!
    • 我认为它可以工作,但footab 文件仍然是空的。有什么想法吗?
    • 尝试输入输出文件的完整路径。
    【解决方案2】:

    试试

    gc .\0.txt  | 
     % { $_ -replace '  +',"`t" } |   
         set-content .\temp.txt
    

    【讨论】:

    • @AnsgarWiechers 已编辑 2 ' ' 空格字符 ;)
    • 你是说单个空格会被替换吗?如果是这样,那不是我需要的。数据中有单个空格,每列之间总是有 2 个或更多空格。谢谢!
    • @LawrenceKnowlton 不,不会替换单个空格。
    • 酷!我会试着破译你那里有什么。我知道您正在使用 GetContent 的别名,但在那之后,语法是 ehm 征税大声笑!谢谢!
    • @LawrenceKnowlton + 在正则表达式中的意思是“前一个表达式一次或多次”。在这种情况下,前面的“表达式”只是一个空格,并且这个表达式前面有另一个空格。因此,整个表达式转换为“一个空格后跟一个或多个空格”(或简称为“2 个或多个空格”)。
    猜你喜欢
    • 1970-01-01
    • 2011-01-23
    • 2011-09-15
    • 2011-04-21
    • 2021-08-24
    • 2020-03-11
    • 2011-10-22
    • 2011-08-14
    • 2016-06-23
    相关资源
    最近更新 更多