删除第一个逗号字符之前的文本

时间:2020-01-02 18:01:56

标签: regex linux sed

我正在尝试使用sed删除第一个逗号之前的所有内容,包括该逗号,但保留此后的所有内容。我知道对此有类似的问题(herethere),但是我无法针对此特定任务修改这些情况。

说我有一个列表CSV,例如:

col1,col2,col3
1,2,3
4,5,6

像这样运行sed后

sed 's/^.*,//' file.csv
sed 's/^.*,(.*)/(1)/' file.csv

在第一种情况下,我看到仅保留了最后一列,而在第二种情况下则什么也没有发生。但是,我希望这两种情况都可以类似地工作:

  • ^:将与行的开头匹配。
  • .*:任何次数,任何次数。
  • ,:我希望它与第一个逗号匹配,为什么不匹配?

1 个答案:

答案 0 :(得分:1)

能否请您尝试以下。在这里使用sed的反向引用概念,其中将所有内容匹配到第一次出现,(逗号),然后将所有内容保存在一个临时的缓冲存储器中,稍后通过{{1 }}。

\1

为什么OP的尝试不起作用,因为OP使用sed 's/[^,]*,\(.*\)/\1/' Input_file 并且.*,是贪婪的字符,所以它一直覆盖到.*的最后一次出现,因此尽管捕获到它的第一次出现我们直到最后一个逗号才得到价值。