汉建武五年(公元2 9 年),光武帝刘秀命令建威大将军耿?前去讨伐张步。耿?先在外围扫荡,平定了济南郡,然后逐渐威胁张步中心。当时,张步以剧县作为都城。派他的弟弟张蓝率领精兵二万人在西安县驻守, 各郡太守集合一万多人守卫临?, 两地相距四十里。
耿?率领军队进军画中,画中位于西安和临?之间。耿?看到西安城虽然很小,却很坚固,张蓝的守军也很精锐;临?虽然名为大城,但实际上却很容易攻取。于是传令各将校,五天以后会合, 攻打西安。张蓝听说后,日夜警戒。
到了预定的日期,半夜时分,耿?命令各将领让部队在睡觉的地方吃饭。到了天亮,军队开到临?城。只用了半天时间,就将它攻下,军队进去占据了该城。耿?下令,不许军队抢掠,要等张步来了以后才掠夺财物,以激怒张步。西安的张蓝听说后,非常害怕,就率领军队逃回剧县。
张步听说临?被攻下,联合三个弟弟张蓝、张弘、张寿以及前大彤军首领重异等人的军队,号称二十万,抵达临?城东,准备进攻耿?。耿?向刘秀报告,说:“我占据临?,深挖战壕,高筑城墙。张步从剧县进攻,军队疲惫不堪。他要进军,我就引诱他进攻;他要撤退,我就追击。我依靠自己的营垒作战,比敌军精锐百倍,以逸待劳,以实攻虚,十天之内,就能斩获张步的脑袋。”
耿?率领军队出营,到淄水边,遇上重异的军队。骑兵突击队想要进攻,耿?害怕挫了敌军的锐气,让张步不敢再前进,就率军回到临?城,在城内驻扎,派都尉刘歆、泰山太守陈俊分别在城下布阵。耿?是故意表现自己的软弱,来助长对方的气焰。张步气盛,直接进攻耿?的军营,与刘歆等人交战。耿?登上原齐国宫殿残剩的高台,观察刘歆等人同张步交战的情况,时机一到,就亲自率领精锐部队,在东城下从侧面攻击张步,大败敌军。交战中有流箭射中耿?的大腿,耿?用佩刀砍断箭杆,身边都没有人知道,天色渐黑时收兵。第二天早晨,耿?又率军出营交战。从早晨一直战到黄昏,再次大败敌军,杀伤敌人无数,尸体填满了水沟。耿?料到张步失利后会撤退,预先在左右两翼设下了埋伏。深夜,张步果然率领军队撤退,埋伏的士兵发起进攻,一直追到巨昧河边,前后八九十里的路上留了一地的死尸。耿?缴获张步的辎重几千车。张步逃回剧县,兄弟各自带兵撤回。
过了几天,刘秀抵达临?,亲自犒劳军队,大会群臣。刘秀进入剧县,耿?则继续追击张步。张步逃奔平寿县,苏茂率领一万多人前来援救。苏茂责备张步说:“凭南阳军的精锐,加上延岑那么善战,却被耿?打败。大王为什么要前去进攻耿?的阵地呢?您既然征召我来,就不能等等吗?”张步说:“实在是惭愧,没有什么可说的。”
刘秀派使者告诉张步、苏茂,能诛杀对方并投降的,封侯。于是张步杀死苏茂,到耿?的军营门口,脱去上衣,袒露臂膀,向他投降。刘秀封他为安丘侯。