Grep:从第二列中删除重复的输入

时间:2018-11-23 09:36:49

标签: csv grep duplicates

我有一个包含两列的CSV文件:

"SKU";"SKU DESCRIPTION"

我想从第二列中删除第二次出现的SKU。

一个例子。

"919";"919 DESCRIPTION"

结果应该是

"919";"DESCRIPTION"

1 个答案:

答案 0 :(得分:0)

一种方法是将sed与捕获组一起使用,并使用对第三捕获组的向后引用,以使第二列的开头与第一列中捕获的内容匹配。

^(("([^"]+)";")\3 )

Regex demo

说明

  • ^断言字符串的开头
  • (第一个捕获组
    • (第二捕获小组
      • "([^"]+)";"匹配双引号并捕获第三个捕获组中的中间内容,然后匹配;"
    • )\3关闭第二个捕获组,并使用后向引用和空格来匹配第三个捕获组中捕获的内容
  • )关闭第一个捕获组

然后在替换项中,使用第二个捕获组:

sed -r 's/^(("([^"]+)";")\3 )/\2/' file.csv

如果要备份,请使用:

sed -r -i.bak 's/^(("([^"]+)";")\3 )/\2/' file.csv