如何用sed模仿“ cut -d:-f2”? (“(。*):(。*):”匹配太多字段)

时间:2018-12-09 22:01:53

标签: regex sed cut regex-greedy

请明确一点:我正在/ etc / passwd上测试我的代码。 我正在尝试使用sed从文本中删去第二列(这是我老师的一项练习,这就是为什么我不使用其他任何东西)。 我尝试使用

sed 's/\(.*\):\(.*\):\(.*\)/\2/' /etc/passwd

,但是它削减了最后一列,可能是因为sed占用了所有字符,直到找到最后两个“:”。我如何在不指定文件数量的情况下削减第二列?

1 个答案:

答案 0 :(得分:2)

您确定,.*可以匹配任意数量的字符,包括:

相比之下,

[^:]*匹配除{em> a :以外的所有内容,因此不容易出现这种情况。

正如Wiktor在评论中指出的那样,然后:

sed -Ee 's/^([^:]*):([^:]*):.*/\2/' <<<'one:two:three:four'

...正确返回two