CSV中逗号之间的匹配

时间:2017-11-27 14:59:57

标签: regex sed

我有一个CSV文件,如下所示:

metadata,metadata,somevalue: a1;,,,,,,,,,,somevalue: b;,,,,,,,,,,,,,somevalue: c;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,somevalue: d*;,,,,,,,,,,,,,,,,somevalue: e*4; f; g;,,,,,,,,,,,somevalue: h;i;j*a,,,,,,

我想用*

之类的内容替换包含DATAREMOVED的列的所有内容

对于上面的例子,输出将是这样的:

metadata,metadata,somevalue: a1,,,,,,,,,,somevalue: b;,,,,,,,,,,,,,somevalue: c;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,DATAREMOVED,,,,,,,,,,,,,,,,DATAREMOVED,,,,,,,,,,,DATAREMOVED,,,,,,

我已经尝试过这样的事情:sed 's/,.*?\*.*?;/DATAREMOVED/g'但是它在比赛结束后从第一个,到第一个,继续抓取,但这并不起作用。

谢谢!

2 个答案:

答案 0 :(得分:0)

Linq可以提供帮助。

public string ReplaceStar(string input)
{
    var outputArray = input.Split(',').Select(subStr => subStr.Contains('*') ? "DATAREMOVED" : subStr).ToList();
    return string.Join(",", outputArray);
}

答案 1 :(得分:0)

使用awk,您可以使用模式设置输入Field Separator,使用'DATAREMOVED'设置输出字段分隔符:

awk -F'[^,*]*\\*[^,]*' -v OFS='DATAREMOVED' '{$1=$1}1' yourfile

$1=$1仅用于强制使用新字段分隔符更新记录。