二月,袁绍派遣郭图、淳于琼、颜良前往白马,攻打东郡太守刘延。袁绍则亲自率领大军抵达黎阳,准备渡过黄河。夏四月,曹操决定北上救援刘延。荀攸向曹操献策道:“如今我军兵力较少,难以与袁绍正面抗衡,必须分散敌军的兵力,才有取胜的机会。您先率军抵达延津,做出要渡河袭击袁绍后方的态势,袁绍必定会分兵向西应对。此时,我们再派轻装部队迅速袭击白马,打他们个措手不及,这样便能一举擒获颜良。”曹操采纳了荀攸的计策。袁绍听闻曹操的军队要渡河,果然立刻分兵向西防御。曹操见袁绍中计,便率领军队日夜兼程,直逼白马。曹军距离白马还有十多里时,颜良才得知消息,大惊失色,赶忙仓促迎战。曹操派张辽、关羽作为先锋出击,二人勇猛无比,率军大破袁军,斩杀颜良,成功解除了白马之围。随后,曹操将白马的百姓迁徙走,沿着黄河向西行进。
袁绍得知颜良被杀,白马之围已解,恼羞成怒,立即下令渡河追击曹操的军队。袁绍的大军一直追到延津以南。曹操见状,下令军队在南阪下扎营,并派人登上营垒了望敌军。了望的士兵报告说:“敌军大约有五六百骑兵。”过了一会儿,又报告说:“敌军骑兵逐渐增多,步兵更是数不胜数。”曹操说道:“不用再报告了。”接着,他命令骑兵解下马鞍,放开马匹。此时,曹操从白马缴获的辎重物资正沿着道路运输。众将领看到敌军骑兵众多,心中担忧,纷纷建议曹操返回营寨防守。荀攸却说道:“这正是引诱敌军的计策,怎么能撤退呢!”不久,袁绍的骑将文丑与刘备率领五六千骑兵先后赶到。众将领再次焦急地说道:“可以上马迎敌了!”曹操却镇定自若地说:“还不到时候。”又过了一会儿,敌军骑兵越来越多,部分骑兵开始分散去抢夺辎重。曹操见时机已到,果断下令:“可以出击了!”于是,曹军骑兵纷纷上马,此时曹操的骑兵虽不满六百,但他们士气高昂,奋勇出击,大破袁军,斩杀文丑。颜良、文丑都是袁绍麾下的名将,两场战斗下来,皆被曹操所杀,袁绍的军队听闻此消息,大为震惊。曹操大获全胜后,率军返回官渡。袁绍则退守阳武。不久后,关羽寻得机会,逃离曹营,回到刘备身边。
八月,袁绍的军队逐渐向前推进,在沙堆旁安营扎寨,营寨连绵东西数十里。曹操也分兵扎营,与袁绍的军队对峙。双方交战,曹操的军队出师不利。(习凿齿所着的《汉晋春秋》记载,许攸曾劝说袁绍:“您不要与曹操正面交锋,应迅速分兵牵制他,然后直接从其他道路迎接天子,这样大事便可成功。”袁绍却不听从,固执地说:“我一定要先包围并击败曹操。”许攸听后,十分恼怒。)当时,曹操的军队兵力不足一万,且受伤的士兵占了十分之二三。(臣松之认为,曹操刚开始起兵时,就已经拥有五千兵力,此后百战百胜,战败的情况仅占十分之二三。况且曹操击败黄巾军后,收编了三十多万降卒,其他被他吞并的势力更是数不胜数。虽然历经征战会有人员伤亡,但兵力不应如此之少。况且双方扎营对峙,与冲锋陷阵、决一死战的情况不同。本纪记载:“袁绍拥有十多万大军,营寨东西绵延数十里。”魏太祖曹操虽然足智多谋、随机应变,但即便如此,又怎么可能凭借数千兵力,长时间与袁绍抗衡呢?从常理推断,我认为并非如此。袁绍扎营数十里,曹操能够分营与之对峙,这说明曹操的兵力不会太少,此为其一;袁绍若兵力是曹操的十倍,理应全力包围曹操,断绝其出入通道。然而曹操却能派徐晃等人袭击袁绍的运粮车,自己也能亲自出击淳于琼等人,进军返回都畅通无阻,这表明袁绍的兵力并不能完全压制曹操,曹操的兵力不会太少,此为其二;诸多书籍都记载曹操坑杀袁绍八万或七万人。八万人奔逃溃散,绝非八千人所能捆绑制服,而袁绍的大军却都乖乖受死,曹操若兵力太少,又怎能做到呢?此为其三。由此可见,这些记载可能是作者为了以少胜多的奇闻而夸大其词,并非真实记录。按照《钟繇传》的记载:“曹操与袁绍相持时,钟繇担任司隶校尉,送了两千多匹马给曹操的军队。”而本纪和《世语》都称曹操当时仅有六百多骑兵,那么钟繇送的马都到哪里去了呢?)
袁绍再次进军,逼近官渡,他下令军队堆筑土山,挖掘地道,试图以此进攻曹操的营寨。曹操针锋相对,也在营内堆土山、挖地道,与袁绍对抗。袁绍命士兵向曹操营中射箭,一时间,箭如雨下,营中行走的士兵都只能用盾牌遮挡,众人心中十分恐惧。此时,曹操的军队粮食短缺,他写信给荀彧,商议是否要退回许县。荀彧认为:“袁绍将全部兵力聚集在官渡,就是想与您一决胜负。您以弱敌强,若不能战胜袁绍,必定会被他所乘,这是关乎天下大局的关键时机。况且袁绍不过是一介布衣出身的豪杰,虽能聚集人才,却不懂得任用。凭借您的英明神武,再加上顺应天下大势,无论走向何方,都必定能成功!”曹操听后,觉得荀彧说得十分有理,便采纳了他的建议,继续坚守官渡。
孙策得知曹操与袁绍在官渡相持不下,便打算趁机袭击许县。然而,他的计划还未实施,就被刺客刺杀身亡。
汝南的降贼刘辟等人背叛曹操,响应袁绍,在许县附近劫掠。袁绍派刘备前去援助刘辟,曹操则派曹仁迎战。曹仁勇猛善战,很快便击破刘备和刘辟的军队。刘备见势不妙,仓皇逃走,曹仁乘胜追击,攻破了刘辟的营寨。
在与袁绍对峙的这段艰难日子里,曹操的军队时刻面临着严峻的考验。袁绍的数千辆运粮车缓缓驶来,试图为其大军补充物资。曹操巧用荀攸的计策,派遣徐晃、史涣前去截击。徐晃和史涣不负所望,带领曹军勇猛作战,一举大破袁绍的运粮队伍,将所有运粮车付之一炬。熊熊大火燃烧在战场之上,滚滚浓烟遮天蔽日,袁绍的补给计划遭受重创。
此后,曹操与袁绍相持数月之久。尽管在这段时间里,曹操凭借着出色的指挥和将士们的英勇奋战,接连斩杀袁绍的大将,但曹军兵力本就少于袁绍,如今粮食也即将告罄,士兵们疲惫不堪,士气逐渐低落。看着辛苦运送粮草的士兵,曹操心中满是感慨,他鼓励道:“再坚持十五日,我必定为你们打败袁绍,到时候就不用你们如此辛苦了!”
建安五年冬十月,袁绍再次派遣大量车辆运送粮草,派淳于琼等五人率领一万多人护送,粮草屯扎在袁绍大营以北四十里处。袁绍的谋臣许攸,因贪财的缘故,在袁绍处未能得到满足,一气之下前来投奔曹操。许攸见到曹操后,立刻献上奇计,建议曹操攻打淳于琼等人。曹操身边的人听闻此计,心中疑虑重重,对许攸的建议持怀疑态度。关键时刻,荀攸和贾诩站出来,力劝曹操采纳许攸的计策。曹操当机立断,留下曹洪镇守大营,自己亲率五千步骑兵,趁着夜色悄悄出发。他们急行军一夜,天快亮时,终于赶到了淳于琼的营地。
淳于琼等人远远望见曹操的军队人数不多,便有些轻敌,率军出营列阵在营门之外。曹操见此情形,果断下令发动猛攻。淳于琼抵挡不住,急忙率军退回营中,紧闭营门坚守。曹操怎会轻易放过这个机会,立即指挥军队对营寨发起了猛烈的攻击。
袁绍得知淳于琼被攻,心急如焚,赶忙派遣骑兵前去救援。曹操的军队在进攻时,身边有人焦急地报告:“敌人的骑兵越来越近了,请您分兵抵抗!”曹操听后,愤怒地呵斥道:“等敌人到了背后再报告!”在曹操的激励下,士兵们深知此战的重要性,个个抱着必死的决心,奋勇拼杀。最终,曹军大破淳于琼的军队,淳于琼等将领皆被斩杀。
据《曹瞒传》记载,曹操听闻许攸前来投奔,兴奋得连鞋子都来不及穿,光着脚就出门迎接,他一边拍手一边笑着说:“子远,你来了,我的大事就有希望了!”入座之后,许攸问道:“袁氏军队强盛,您打算如何应对?如今军中还有多少粮草?”曹操起初想试探许攸,便回答说:“还能支撑一年。”许攸立刻识破了曹操的谎言,说道:“不是这样,你再说实话!”曹操又说:“能支撑半年。”许攸有些生气地说:“您难道不想打败袁氏吗?为何不说实话!”曹操这才笑着说:“刚刚是和你开玩笑罢了,实际上只能支撑一个月,这可如何是好?”许攸说道:“您孤军坚守,外无援兵且粮草已尽,如今正是危急时刻。袁氏的辎重有一万多辆车,都屯放在故市、乌巢,那里的守军防备并不严密。现在您若派轻装部队前去偷袭,出其不意地到达,烧毁他们的粮草辎重,不出三天,袁氏就会自行溃败。”曹操听后大喜,立即挑选精锐的步骑兵,让他们都打着袁军的旗帜,士兵口中衔着枚,将马嘴捆绑起来,以防发出声响,趁着夜色从小路出发。士兵们每人抱着一捆柴草,一路上遇到有人询问,就回答说:“袁公担心曹操袭击后方军队,派我们来加强防备。”听到的人都信以为真,没有丝毫怀疑。曹军抵达乌巢后,迅速包围营地,然后四处放火。一时间,乌巢营中火光冲天,喊杀声、惊叫声交织在一起,乱作一团。曹军奋勇杀敌,不仅烧毁了袁军所有的粮谷财宝,还斩杀了督将眭元进、骑督韩莒子、吕威璜、赵叡等人,甚至割下了将军淳于仲简的鼻子。淳于仲简当时还未断气,曹军还斩杀了一千多名袁军士卒,并割下他们的鼻子,就连牛马也被割掉唇舌,以此来震慑袁绍的军队。袁军将士看到这一幕,无不惊恐万分。当天夜里,曹军俘虏了淳于仲简,将他带到曹操面前。曹操问道:“你为何会落到如此田地?”淳于仲简却说道:“胜负乃是天意,何必多问!”曹操本不想杀他,许攸却在一旁说道:“明天他照镜子看到自己的样子,肯定会对您心怀怨恨,不能留他。”于是,曹操下令杀了淳于仲简。