Regex Powershell如何仅为基于正则表达式的特定列替换CSV文件中的值
我一直在试图找到解决这个问题的方法,我正在从一个更大的文件中创建一个CSV,选择特定的列,我从这里得到了很大的支持,这项任务正在完成,但我的CSV文件包含我想要替换的值,例如,列“用户名”,我只想保留一个用户,意思是删除“,”之后的所有内容,我得到一个正则表达式,看起来像Regex Powershell如何仅为基于正则表达式的特定列替换CSV文件中的值,regex,powershell,csv,Regex,Powershell,Csv,我一直在试图找到解决这个问题的方法,我正在从一个更大的文件中创建一个CSV,选择特定的列,我从这里得到了很大的支持,这项任务正在完成,但我的CSV文件包含我想要替换的值,例如,列“用户名”,我只想保留一个用户,意思是删除“,”之后的所有内容,我得到一个正则表达式,看起来像 (,.*$)|(不适用)|(sscope) 这就是我想用空字符串替换的内容,但我无法让它工作,它有时会删除所有内容 用户名列中的值如下所示 User Name B2 cell : not applicable B3 cell
(,.*$)|(不适用)|(sscope)
这就是我想用空字符串替换的内容,但我无法让它工作,它有时会删除所有内容
用户名列中的值如下所示
User Name
B2 cell : not applicable
B3 cell : sscope, sscope
B4 cell : sscope
B5 cell : sscope, sscope, hernhng002, coanbvf001, clacbff01, polsbvcw04, taylor38, milthy12, hic6yth31, carruhgy58, grabngh09, starytht37, milytht937
B6 cell : tamyhg4647adm
B7 cell : moreduj4664
问题2:如何添加一个列,该列来自基于公用键的不同CSV文件(两个文件中的名称列),但只有一个文件具有内存列,我想将其添加到第一个文件中。谢谢
. D:\Data\BF_Scripts\Write-Log.ps1
$filePath = "D:\Data\Input\bigFixDataNew.csv"
#$filePath = "D:\Data\Input\BF_Test_Dec2019.csv"
$System = "D:\Data\Output\System.csv"
$desiredColumnsSystem = @{ expression = {$_.'Internal Computer ID'}; label = 'RESOURCEID' },
@{ expression = {$_.'Computer Name'}; label = 'NAME'},
@{ expression = {$_.'DNS Name'}; label = 'DOMAIN'},
@{ expression = {$_.'DNS Name'}; label = 'USER_DOMAIN'},
@{ expression = {$_.'User Name'}; label = 'USER_NAME'}
$Regex = '(,.*$)|(, sscope)|(sscope)'
Try {
Write-Log -Message 'Starting Creation of System CSV...'
Import-Csv $filePath | Select-Object $desiredColumnsSystem | Sort RESOURCEID -Unique |
Export-Csv -Path $System –NoTypeInformation
$content = Get-Content $System
$content | ForEach-Object {$_ -replace $Regex,''} | Set-Content $System
$size = ((Get-Item $system).length/1KB)
$lastTouchedDate = (Get-Item $system).LastWriteTime
Write-Log -Message "Created the System CSV Successfully !! The size of $system is $size KB and the last write time was $lastTouchedDate"
}
catch
{
Write-Log -Message $_.Exception.Message
}
这似乎已经做到了,再次感谢你们所有人
Import-Csv $filePath | Select-Object $desiredColumnsSystem | Sort RESOURCEID -Unique | ForEach-Object {
If ($_.USER_NAME -match $Regex) {
$_.USER_NAME = $_.USER_NAME -replace $Regex,''
}
$_
} |
Export-Csv -Path $System –NoTypeInformation
我认为如果您能向我们展示实际输入文件
D:\Data\input\bigFixDataNew.csv
的前3或4行,会有所帮助。当然,您需要对其进行清理,这样我们就不会看到真实的用户名或其他秘密。目前,我认为我根本看不到类似CSV文件的东西……而不是Get Content…|在($System
)csv文件上修改行| Set Content
,您最好这样做:导入csv…|修改属性|导出Csv…
。对于另一个问题(下次您应该单独提问),请参阅:Hello@Theo,此csv文件根据所需列生成多个csv,系统csv包含需要清理的用户名抱歉@Theo,我正在尝试附加csv文件,但是,以下更改几乎产生了我需要的内容,除非它用空字符串替换所有内容,而不是替换子字符串$Regex='()|(,sscope)|(sscope)|(,.*$)'尝试{Write Log-Message'开始创建系统CSV…'导入CSV$filePath |选择对象$desiredColumnsSystem |排序资源ID-唯一| ForEach对象{If($.USER\u NAME-匹配$Regex){$\.USER_NAME=''}$\}|导出Csv-Path$System-NoTypeInformation