独特的搜索和替换

时间:2015-06-01 15:02:35

标签: excel csv vim

我有一个有两列的csv。如果我将此csv导入excel,我最终会得到A列和B列。

A列包含一串文字,例如:1234(每行有一个唯一值)
B列包含一串文本,例如:abcd1234

我需要删除A列中包含的B列中的文本。每行都有唯一的数据,所以示例如下:

1234, abcd1234,
5678, efgh5678,
9876, ijkl9876,

我最终想要的是:

1234, abcd,
5678, efgh,
9876, ijkl,

我很乐意使用命令行来处理任何想法。

1 个答案:

答案 0 :(得分:1)

在Vim中,您可以通过:substitute,捕获第一列以及第二列中与第一个值不匹配的部分(通过\1引用)来执行此操作。我将让匹配从第二列开始(使用\zs);这样可以避免重新引用替换部分中的第一列,该部分仅包含之前的内容(\2;不在示例文本中),以及(\3之后)第1列中的重复部分

:%substitute/^\([^,]\+\),\zs\([^,]*\)\1\([^,]*\)/\2\3/

[^,]代表列中的任何字符,假设采用简单的CSV格式。