使用sed命令捕获组
我有下面这样的字符串使用sed命令捕获组,sed,Sed,我有下面这样的字符串 _c_VehCfg1_oCAN00_f276589c_In_Int_buf *pVehCfg1_oCAN00_f276589c_In_IntBuf = (_c_VehCfg1_oCAN00_f276589c_In_Int_buf *)can_Msg_tmp_buffer; 我想用ptr替换can\u Msg\u tmp\u buffer,如下所示 _c_VehCfg1_oCAN00_f276589c_In_Int_buf *pVehCfg1_oCAN00_f2765
_c_VehCfg1_oCAN00_f276589c_In_Int_buf *pVehCfg1_oCAN00_f276589c_In_IntBuf = (_c_VehCfg1_oCAN00_f276589c_In_Int_buf *)can_Msg_tmp_buffer;
我想用ptr
替换can\u Msg\u tmp\u buffer
,如下所示
_c_VehCfg1_oCAN00_f276589c_In_Int_buf *pVehCfg1_oCAN00_f276589c_In_IntBuf = (_c_VehCfg1_oCAN00_f276589c_In_Int_buf *)ptr;
echo "_c_VehCfg1_oCAN00_f276589c_In_Int_buf *pVehCfg1_oCAN00_f276589c_In_IntBuf = (_c_VehCfg1_oCAN00_f276589c_In_Int_buf *)can_Msg_tmp_buffer;" | sed 's/\(_C_[[:alnum:]_]*IntBuf = [[:alnum:]_]*\)can_Msg_tmp_buffer/1\ptr/g'
我已经尝试了sed
如下
_c_VehCfg1_oCAN00_f276589c_In_Int_buf *pVehCfg1_oCAN00_f276589c_In_IntBuf = (_c_VehCfg1_oCAN00_f276589c_In_Int_buf *)ptr;
echo "_c_VehCfg1_oCAN00_f276589c_In_Int_buf *pVehCfg1_oCAN00_f276589c_In_IntBuf = (_c_VehCfg1_oCAN00_f276589c_In_Int_buf *)can_Msg_tmp_buffer;" | sed 's/\(_C_[[:alnum:]_]*IntBuf = [[:alnum:]_]*\)can_Msg_tmp_buffer/1\ptr/g'
但我仍然没有得到预期的结果,相反,sed
输出与输入相同
问题是我也有下面这样的字符串
_c_GW_C4_oCAN00_f276589c_In_Moto_buf *pGW_C4_oCAN00_f276589c_In_MotoBuf = (_c_GW_C4_oCAN00_f276589c_In_Moto_buf *)can_Msg_tmp_buffer;
我只想替换
类型
以\u Int\u buf
而不是\u Moto\u buf
将单个单词与正则表达式匹配并从中获取捕获的组会变得非常复杂。一种方法是使用保证发生的字符串的已知部分
对于您的情况,使用\u IntBuf中的字符串\u和可以\u Msg\u tmp\u缓冲区代码>我们尝试唯一地识别这些线模式并进行替换
sed 's/\(.*\)_In_IntBuf = \(.*\)can_Msg_tmp_buffer;/\1_In_IntBuf = \2ptr;/'
将单个单词与正则表达式进行匹配并从中获取捕获的组会变得非常复杂。一种方法是使用保证发生的字符串的已知部分
对于您的情况,使用\u IntBuf
中的字符串\u和可以\u Msg\u tmp\u缓冲区代码>我们尝试唯一地识别这些线模式并进行替换
sed 's/\(.*\)_In_IntBuf = \(.*\)can_Msg_tmp_buffer;/\1_In_IntBuf = \2ptr;/'
如果您对awk
没有问题,请尝试以下操作
awk '/_In_IntBuf =/{sub(/can_Msg_tmp_buffer/,"ptr")} 1' Input_file
如果您想将输出保存到输入文件本身,请在上述代码中附加>临时文件和&mv临时文件输入文件。如果您同意awk
请尝试以下操作
awk '/_In_IntBuf =/{sub(/can_Msg_tmp_buffer/,"ptr")} 1' Input_file
如果您想将输出保存到输入文件本身,请在上述代码中附加>临时文件和&mv临时文件输入文件。我不确定为什么对此问题进行了投票,原因是问题寻求调试帮助(“此代码为什么不起作用?”)
。Q显然进行了尝试(需要滚动查看sed
命令),并提供了有效的i/p和预期的o/p。我不确定为什么对此问题进行了投票,原因是问题寻求调试帮助(“为什么此代码不工作?”)
。Q显然有一次尝试(需要滚动查看sed
命令),并提供了有效的i/p和预期的o/p。它正常我只需要一个工作解决方案,因为我正在使用上面答案中提供的巨型C
codesed
命令。它正常我只需要一个工作解决方案,当我使用巨大的C
codesed
时,上面的回答中提供的命令帮助了我。