Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Powershell如何仅为基于正则表达式的特定列替换CSV文件中的值_Regex_Powershell_Csv - Fatal编程技术网

Regex Powershell如何仅为基于正则表达式的特定列替换CSV文件中的值

Regex Powershell如何仅为基于正则表达式的特定列替换CSV文件中的值,regex,powershell,csv,Regex,Powershell,Csv,我一直在试图找到解决这个问题的方法,我正在从一个更大的文件中创建一个CSV,选择特定的列,我从这里得到了很大的支持,这项任务正在完成,但我的CSV文件包含我想要替换的值,例如,列“用户名”,我只想保留一个用户,意思是删除“,”之后的所有内容,我得到一个正则表达式,看起来像 (,.*$)|(不适用)|(sscope) 这就是我想用空字符串替换的内容,但我无法让它工作,它有时会删除所有内容 用户名列中的值如下所示 User Name B2 cell : not applicable B3 cell

我一直在试图找到解决这个问题的方法,我正在从一个更大的文件中创建一个CSV,选择特定的列,我从这里得到了很大的支持,这项任务正在完成,但我的CSV文件包含我想要替换的值,例如,列“用户名”,我只想保留一个用户,意思是删除“,”之后的所有内容,我得到一个正则表达式,看起来像
(,.*$)|(不适用)|(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