我有类似下面的字符串
VIN_oFDCAN8_8d836e25_In_data;
IPC_FD_1_oFDCAN8_8d836e25_In_data
BRAKE_FD_2_oFDCAN8_8d836e25_In_data
我想在两者之间插入_Moto
VIN_oFDCAN8_8d836e25_In_Moto_data
IPC_FD_1_oFDCAN8_8d836e25_In_Moto_data
BRAKE_FD_2_oFDCAN8_8d836e25_In_Moto_data
但是当我将sed
用于以下捕获组时
echo VIN_oFDCAN8_8d836e25_In_data | sed 's/_In_*\(_data\)/_Moto_\1/'
我得到的输出为:
VIN_oFDCAN8_8d836e25_Moto__data
您能指出我正确的方向吗?
答案 0 :(得分:2)
尽管您可以使用IN
字符串的简单替换(考虑到它在Input_file中仅出现1次),但是由于您专门要求捕获sed
中的样式,因此您可以尝试遵循
sed 's/\(.*_In\)\(.*\)/\1_Moto\2/g' Input_file
上述方法还将添加字符串_Moto
,以避免在_
混乱之后添加两次Moto
,这要感谢@Bodo在评论中提及相同的内容。
OP的尝试问题:由于您没有将_In_*
留在sed
的内存中,因此它只是将\(_data_\)
留在内存中,这就是它不起作用的原因,我已经在上面对其进行了修复,我们还需要将所有内容都保留到_IN
中,然后它才能飞行。
答案 1 :(得分:1)
您可以使用以下命令直接替换匹配的字符串
MyShaderUniforms
答案 2 :(得分:0)
$ sed 's/_[^_]*$/_Moto&/' file
VIN_oFDCAN8_8d836e25_In_Moto_data
IPC_FD_1_oFDCAN8_8d836e25_In_Moto_data
BRAKE_FD_2_oFDCAN8_8d836e25_In_Moto_data