我试图在bash脚本中写一行,它接受所有推送和弹出寄存器的实例,并将其从32位寄存器更改为64位寄存器。例如,push ecx
应该变为push rcx
唯一可以变化的字符是倒数第二个,所以使用e\wx
查找工作正常,但我如何制作它以便保存\ w中的任何字符,以及哪个,推/弹的存在?唯一需要改变的角色是e到r。
总之,我有这个:
sed -i -e "s/push eax/push rax/"
sed -i -e "s/push ebx/push rbx/"
sed -i -e "s/push ecx/push rcx/"
sed -i -i "s/push edx/push rdx/"
sed -i -e "s/pop eax/pop rax/"
sed -i -e "s/pop ebx/pop rbx/"
sed -i -e "s/pop ecx/pop rcx/"
sed -i -i "s/pop edx/pop rdx/"
我想知道我是否可以在一行中完成
提前致谢!
答案 0 :(得分:2)
答案 1 :(得分:2)
你走了:
sed -i 's/\(push\|pop\) r\([abcd]\)x/\1 e\2x/'
示例运行:
$ echo """push rax
push rbx
push rcx
push rdx
pop rax
pop rbx
pop rcx
pop rdx
nop""" | sed 's/\(push\|pop\) r\([abcd]\)x/\1 e\2x/'
push eax
push ebx
push ecx
push edx
pop eax
pop ebx
pop ecx
pop edx
nop