Powershell正则表达式:仅使用制表符替换多个空格

5
这是一个与C#问题类似的PowerShell问题:C# 问题链接 我有一个文本文件中的固定宽度列数据,长度不定,所以我想用制表符来分隔数据。为此,我想使用PowerShell读取文件,仅使用正则表达式替换多个空格为制表符,保持行末不变,并将其输出到临时文件。然后我会将其重命名为原始文件。
我已经在网上搜索了很多,只能找到一些零散的信息。非常感谢您对此的帮助!
2个回答

7
  1. Fetch the contents

    $content = [IO.File]::ReadAllText('foo.txt')
    
  2. Replace at least two spaces by a single tab:

    $content = $content -replace ' {2,}', "`t"
    
  3. Write back to a file

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

首先,谢谢!那真是太快了!另外,$utf8语句对此有什么作用?在普通的ASCII文件中是否必要?再次感谢! - Lawrence Knowlton
它只是指定输出应该写成UTF-8而没有BOM。如果只是ASCII,您可以省略它,我想。实际上,如果没有编码参数,该方法就会完全这样做,因此在任何情况下都是不必要的。 - Joey
请尝试提供输入和输出文件的完整路径。 - Joey
现在这件事情可能已经没有意义了,毕竟你已经接受了其他答案,并且我对于行末的关注也显得无助。 - Joey
我非常欣赏你的尝试,它们似乎非常健壮,是更好的方法。如果没有更高级的方法,那就用这个吧。如果可以的话,我会看看其他人对你的方法有什么想法,如果我找到了使它工作的建议,我会告诉你的! - Lawrence Knowlton
显示剩余3条评论

3

尝试

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

@AnsgarWiechers 编辑,使用 2 个空格字符 ;) - CB.
你是说单个空格会被替换吗?如果是这样,那不是我需要的。数据中有单个空格,在每一列之间始终有2个或更多的空格。谢谢! - Lawrence Knowlton
@LawrenceKnowlton 不,单个空格不会被替换。 - CB.
太酷了!我会尝试解读你的代码。我知道你在使用GetContent的别名,但是之后的语法很令人费解哈哈!谢谢! - Lawrence Knowlton
我理解了那部分,但其他部分我不确定。 - Lawrence Knowlton
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接