法正向刘备建议说:“曹操一举收降了张鲁,占据汉中,不借助这个有利时机进攻巴、蜀两地,却留夏侯渊、张驻守汉中,自己急速北返,这样做并非是他才智不够,而是力量不足,必将有内忧的缘故。如今估计夏侯渊、张的才能,不及我们的将领,现在举兵进攻,一定可以取胜。夺取汉中后,广开农田,积蓄粮草,等待有可乘之机。搞得好,可以将曹操彻底击败,恢复皇室的权威次之,可以蚕食雍、凉二州,拓展我们的疆土最次,也可以据险固守,与曹操长期对峙。这是上天的赐与,时机不可丧失。”刘备赞同法正的策略,于是率领进军汉中,派张飞、马超、吴兰等驻军下辨。魏王曹操派都护将军曹洪拒敌。
建安二十三年戊戌,公元218年曹洪将要攻击吴兰,而张飞驻军固山,声称要切断曹军的后路。曹洪和将领们商议,犹豫不决。骑都尉曹休说:“张飞等人若确实要切断我军后路,应该派军队隐蔽行军,而现在却先大造声势,而实际上做不到,这是很清楚的。我军应该敌人尚未集结,迅速攻击吴兰,吴兰被击败,张飞自然退走。”曹洪听从了这一建议,进军击败吴兰军,斩杀吴兰。三月,张飞、马超撤退。曹休是魏王曹操的同族子侄辈。
刘备驻军阳平关,曹军夏侯渊、张颌、徐晃等与他对峙。刘务派部下将领陈式等人去切断马鸣阁的道路,被徐晃打败。张驻守在广石,刘备攻打不下来,急发文书调集益州军队。诸葛亮问从事、犍为人杨洪应如何处理此事,杨洪说:“汉中是益州的咽喉,存亡的关键,如失去汉中,就没有蜀了,这是家门前的祸患,对发兵有什么疑问!”当时蜀郡太守法正跟随刘备到了北方,诸葛亮于是上表请求由杨洪代理蜀郡太守。杨洪将各项政务全都办理妥当,于是获得正式任命。
从前,犍为太守李严曾任命杨洪为功曹,李严未离开犍为,而杨洪已做了蜀郡太守。杨洪推荐自己门下的书佐何祗,称他有才干杨洪仍在蜀郡,而何祗已经做了广汉太守。因此,西土人士都佩服诸葛亮,能够充分利用当时的人才。
南阳的官吏和百姓饱受徭役之苦。冬季,十月,宛城守将侯音反叛。南阳太守东里与功曹应余奋力逃了出来,侯音派人骑也追击,乱箭齐发,应余用身体掩护东里,受伤七处而死。侯音的骑兵抓住东里,带了回去。此时,征南将军曹仁驻军樊城,以威慑荆州,魏王曹操命曹仁回来讨伐侯音。功曹宗子卿对侯音说:“您顺应民心,兴起大事,远近无不都寄希望于您。现在您捉住郡太守,是悖逆行为,没有益处,为什么不把他放走!”侯音听从了宗子卿的话。宗子卿于是夜里越过城墙,跟随太守召集未参加反叛的民众包围侯音。恰好曹仁的军队也赶到了,便联合起来进攻侯音。
建安二十四年己亥,公元219年春季,正月,曹仁在宛城进行屠杀,把侯音斩首,仍回军驻守樊城。
当初,夏侯渊虽然多次打胜仗,魏王曹操却经常告诫他说:“作为将领,应有胆怯的时候,不能单凭勇猛。将领应当以勇敢为根本,但在行动时要依靠智慧和计谋又依靠勇敢,只能敌得过一名普通人罢了。”后来,夏侯渊与刘备对峙了一年有余,刘备从阳平向南,渡过沔水,顺着山势稍微前行,在定军山扎下营盘。夏侯渊率兵争夺定军山。法正说:“可以发动攻击了。”刘备派讨虏将军黄忠率兵居高临下,擂鼓呐喊,发动进攻,夏侯渊的军队大败,夏侯渊和被斩。张颌率军退回阳平。此时,曹军新失统帅,军中人心惶惶,不知如何是好。督军杜袭和夏侯渊的司马、太原人郭淮集合散乱的兵卒,对各营将士发出号令:”张颌将军是国家的名将,为刘备所惧怕如今军情紧迫,只有在张将军的指挥下,才能转危为安。”于是临时推举张颌为军中主帅。张颌出来统率军队,巡视阵地,将领们都接受张颌的指挥,军心才安定下来。第二天,刘备打算渡汉水发动攻击曹军将领们认为寡不敌众,准备依凭汉水列阵抵抗。郭淮说:“这是向敌人示弱,而不能挫败敌人,不是好计策。不如远离汉水列阵,把敌人吸引过来,等他们渡过一半后,我们再出击,就可以打败刘备。”曹军列好阵,刘备产生怀疑,命令不要渡河。郭淮于是坚守阵地,表明曹军没有撤退之心。郭淮等人把情况上报魏王曹操,曹操很同意他们的作法,派使者把符节授予张颌,仍任命郭淮为司马。