还在渔阳未平定时,建威大将军耿弇就向皇帝请命:“愿北上收集上谷军队,定彭宠于渔阳,取张丰于涿郡,回头收富平、获索盗贼,东攻张步,平定齐地。”皇帝赞赏他的壮志。此时,只剩下张步未灭,皇帝就诏令耿弇讨伐张步。建武五年(公元29年)冬,十月,张步听说耿弇将到,派费邑守历下,又在祝阿、泰山、钟城筑营数十座等待他。耿弇渡黄河先攻击祝阿,从早上打到中午,攻下祝阿。他故意放开一角,让祝阿城的敌兵逃出来,投奔钟城。钟城人听说祝阿已经溃败,十分恐惧,全部逃亡。
费邑分遣弟弟费敢守巨里。耿弇进兵先威胁巨里,令军士修理攻城器械,通知各部:三日以后全力攻巨里城;暗中派出降卒假装逃回去,把攻城日期告诉费邑。费邑到了那天,果然率精兵三万多人来救巨里。耿弇高兴地对诸将说:“我修攻城器械,就是为了引诱敌人。在野外的敌兵好打,何必攻城!”当即分三千人围巨里,自己带精兵上冈阪,居高临下,大破敌军,斩杀费邑。耿弇提着费邑的首级到城下,城中惊恐。费敢忙带领部众突围,逃归张步。耿弇收集城中积蓄,纵兵攻击其他营垒,扫除四十多营,平定了济南郡。
当时,张步在国都剧城,派弟弟张蓝带精兵两万守西安,各郡太守合兵一万多人守临淄,相距四十里。耿弇进兵,在两城之间。耿弇见西安城小而坚固,张蓝的军队又很精锐,临淄名声虽大却容易攻破,就发布命令:五天后攻打西安。张蓝听说,日夜加强警备。到预定日期,半夜时耿弇就命令开饭;天亮时,大军到达临淄城下。
护军荀梁等反对,认为:"攻临淄,西安必定来救;攻西安,临淄不能救,不如攻西安。”耿弇说:“不是这样,西安听说我要攻打他,日夜戒备,正在担忧自己,那里有功夫救人!临淄根本想不到我们会先攻他,必然惊慌,我攻他一天,必定拿下。临淄被拔,西安孤立,必定弃城逃亡。这是所谓'击一而得二`啊。若先攻西安,一时不能攻下,死伤必多;即使能攻下,张蓝带兵逃奔临淄,合兵一处,坚守城池。我军深入敌地,后面无补给运送。十天一月,就是不战也困窘不堪了。”就攻打临淄。只攻了半天,就破城而入。张蓝听说临淄失陷,就带着部众逃回剧城。张步不以为然,说:"尤来、大彤十多万人,都被我打败了。今天耿弇的兵比他们少,又很疲劳,何必怕他!”就和三个弟弟张蓝、张弘、张寿及原大彤首领重异等带兵,号称二十万,到临淄大城东面,准备进攻耿弇。
耿弇上书说:“臣据守临淄,深沟高垒;张步 从剧城来攻,疲劳饥渴。他欲进,我诱而攻之;欲退,我随而击之。臣凭据营垒作战,以逸待劳,以实击虚,十天之内,张步首级可得。”于是先出兵到淄水,与重异相遇。突骑兵要纵马攻击,耿弇怕挫败了敌人的前锋,使张步不敢进兵,就故意示弱,带兵进了小城,派都尉刘歆、泰山太守陈俊分别在城下布阵。张步气盛,直攻汉阵,与刘歆、陈俊交战。耿弇登上原齐王宫故台观察,见两边己经交锋,就亲率精兵,横冲敌军。敌军大败。流箭射中耿弇大腿。他用佩刀截断箭杆,左右无人知道。这时,皇帝在鲁城,准备亲自救援。陈俊建议关闭营门,休养士兵,等待皇帝到来。耿弇说::“皇上到来,臣子应该奉上酒肉,而不能把盗贼留给君王!”就带兵出战,从早上战到黄昏,杀伤敌兵无数,尸体填满濠沟。耿弇事先在敌军退路两侧设置伏兵。天黑以后。张步果然领兵撤退,伏兵奋起攻击,一直追到巨味河边,八、九十里的路上,尸体相接。耿弇缴获辎重两千多車。张步逃回剧城。
几天以后,皇帝到达临淄,亲自慰劳军队,大会群臣。皇帝对耿弇说:“从前韩信破历下开基;今天将军攻祝阿发迹,两处都是齐国的西界,功劳足可相比。但是韩信攻击的是已经投降的齐军,而将军打败的是强大的敌人,建功又比韩信艰难得多。将军在南阳时曾提出要东攻张步、平定齐地,我总感到怀疑。现在看来,有志者事竟成啊!”耿弇追张步到了平寿,苏茂带一万多人来救。皇帝派使者告诉张步、苏茂,谁能诛杀对方投降,可得封侯。张步就杀死苏茂投降。耿弇缴获辎重七千多車,收降士卒十多万人,全部遣返回乡。耿弇又领兵收降了五校等盗贼余党,齐地全部平定。耿弇为将领,一共平定四十六个郡,屠城三百座。未曾打过败仗。
皇帝赦免了张步兄弟,封张步为安丘侯,与妻儿居睢阳。两年以后,张步带着妻儿和弟弟张蓝、张弘逃出,招集旧党乘船入海,被琅琊太守陈俊追上斩首。