建安九年(204年)正月,曹操为进攻袁尚盘踞的邺城,命令军士修通白沟,以便打通粮道。白沟为一小河,在今河南浚县西,发源处靠近淇水,向东北流下去就连接上清河。曹操使人作堰截淇水入白沟加大水量,并疏通白沟,使其能通航运粮。白沟修成后,接通淇水和清河,成为黄河以北地区的水运干道。
二月,曹操乘冀州牧袁尚出兵攻打袁谭之机,亲率大军直指邺城,起土山、挖地道、向邺城发动猛攻。这时,袁尚的谋士审配镇守邺城,见曹军来攻,指挥将士固守待援。四月,曹操见邺城一时难以攻下,留曹洪继续攻城,自己率兵攻下毛城,切断从并州向邺城运送粮食的通道。五月,曹操又命士兵在邺城城外挖掘濠堑,周围四十里,深、宽各二丈,引漳水灌城。邺城城中乏粮,饿死者过半,形势极为危急,审配指挥将士竭力防守。七月,袁尚听说邺城危险,亲率兵万余人回救,在距离邺城十七里之处,靠近滏水扎营,点火通知城中。审配见袁尚救兵来到,点火相应,出兵城外,欲以袁尚里应外合,冲出重围。曹操派兵迎头截击,将审配赶回城中,又挥军击败袁尚。袁尚恐惧,遣使求降,曹操不许。袁尚退兵,曹操随后追击。袁尚部将马延、张凯等临阵投降曹操,军队溃散,袁尚见大势已去,逃奔中山郡。曹操大获全胜,尽得袁尚辎重、印绶、节钺等物。于是让人拿着袁尚印绶给城内的人看,城内守军顿时崩溃。八月,审配之侄审荣开城门迎纳曹军,曹操遂占领邺城。至此,曹操平定冀州。九月,曹操自任冀州牧,冀州从此成为曹操的政治中心。
建安九年(204年)十二月,曹操以背约为名,向袁谭发动进攻。袁谭退至南皮,曹操进军平原,收复袁谭所占据的属县。次年正月,曹操进军南皮,袁谭出战,曹军士卒死伤累累,曹操意欲暂缓进攻。议郎曹纯劝曹操说,大军深入,难以持久,必须有进无退。于是曹操亲自擂鼓,指挥将士冲击,于是大败袁谭,攻占南皮。袁谭出逃,被曹军追兵杀死。至此,袁氏势力基本被肃清。
这时候,曹操手下的重要谋士许攸被杀了。许攸的事情还要从官渡之战说起,那时候许攸还是袁绍的重要谋士。
建安五年(200年),袁绍和曹操开始交战,许攸献计说:“曹操兵少,而集中全力来抵抗我军,许都由剩下的人守卫,防备一定空虚,如果派一支队伍轻装前进,连夜奔袭,可以攻陷许都。占领许都后,就奉迎天子以讨伐曹操,必能捉住曹操。假如他未立刻溃散,也能使他首尾不能兼顾,疲于奔命,一定可将他击败。”袁绍不同意,说:“我一定要先捉住曹操。”而正在这时,许攸家里有人犯法,留守邺城的审配将他们逮捕,许攸知道后大怒,就投奔了曹操。