如何用sed模仿"cut -d: -f2"?("(.*):(.*):"匹配的字段太多)



需要明确的是:我正在/etc/passwd上测试我的代码。我正在尝试用sed从文本中剪切第二列(这是我老师的练习,这就是为什么我不使用其他内容的原因(。我试过使用

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

但它会剪切倒数第二列,这可能是因为sed会删除所有字符,直到找到最后两个":"。如何在不指定文件中有多少列的情况下剪切第二列?

正如您所确定的,.*可以匹配任何数量的字符,包括:s。

相比之下,[^:]*匹配:之外的所有内容,因此不容易出现这种情况。

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

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

正确地返回CCD_ 5。

最新更新