繁体   English   中英

Powershell 脚本仅替换双引号括起来的子字符串中的制表符

[英]Powershell script to replace only the tab characters in substrings enclosed in double quotes

我正在使用制表符分隔值 (tsv) 文本文件。 我正在将它导入 Excel,但出于某种原因,它还将字符串中的制表符(用双引号表示)视为分隔符。

文件中的一行如下所示:

Name  Quote  Random text
Harry  "I like putting    tabs in sentences"  "Here is another tab   "

我正在尝试编写一个 powershell 脚本来读取整个文本文件,只找到用引号括起来的制表符并将它们替换为空格字符。 我知道这是可能的,但问题是我不是 Powershell 或正则表达式的专家:D

有任何想法吗?

尝试这个 -

(Get-Content \\PathToYourTextFile\TabFile.txt).Replace("`t", " ")

或者

Get-Content \\PathToYourTextFile\TabFile.txt | % {$_ -replace ("`t", " ")}

两者都会将文本文件中的tabs替换为单个空格。

如果您想用空格完全替换制表符,请使用Vivek Kumar Singh提供的解决方案。

但是,如果您想将其保留为 TSV,您可以将其导入变量,用空格替换制表符(仅限值),然后导出:

$content = Import-Csv .\file.tsv -Delimiter "`t"
foreach ($line in $content) {
    $line.Name = $line.Name.replace("`t", " ")
    $line.Quote = $line.Quote.replace("`t", " ")
    $line.'Random text' = $line.'Random text'.replace("`t", " ")
}
$content | Export-Csv .\output.tsv -Delimiter "`t" -NoTypeInformation

顺便说一下,这可能不需要,因为我对我来说 Excel 可以正确导入数据。 也许文件/特定行有问题?

在替换命令中使用引号和水平制表符的十六进制值

(gc "\\Path to Your\file") -replace "[\x22][\x09][\x22]"," " | set-content "\\Path to Your\file"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM