Regex “如何模仿”;切割-d:-f2“;和塞德?(“匹配过多的字段”)

Regex “如何模仿”;切割-d:-f2“;和塞德?(“匹配过多的字段”),regex,sed,cut,regex-greedy,Regex,Sed,Cut,Regex Greedy,需要明确的是:我正在/etc/passwd上测试我的代码。 我试图用sed从文本中删去第二栏(这是我老师的练习,这就是为什么我不使用任何其他内容)。 我试着用 sed 's/\(.*\):\(.*\):\(.*\)/\2/' /etc/passwd 但它正在剪切下一个到最后一个列,可能是因为sed正在获取所有字符,直到找到最后两个“:”。如何在不指定文件中将包含多少列的情况下剪切第二列?如您所述,*可以匹配任意数量的字符,包括:s 相比之下,[^:::]*匹配除:之外的所有内容,因此不容易出现

需要明确的是:我正在/etc/passwd上测试我的代码。 我试图用sed从文本中删去第二栏(这是我老师的练习,这就是为什么我不使用任何其他内容)。 我试着用

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

但它正在剪切下一个到最后一个列,可能是因为sed正在获取所有字符,直到找到最后两个“:”。如何在不指定文件中将包含多少列的情况下剪切第二列?

如您所述,
*
可以匹配任意数量的字符,包括
s

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

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

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

sed-Ee的/^([^::]*):([^::]*):./\2/'正如您所确定的,
*
可以匹配任意数量的字符,包括
s

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

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

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