Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 与捕获组的sed_Regex_Sed - Fatal编程技术网

Regex 与捕获组的sed

Regex 与捕获组的sed,regex,sed,Regex,Sed,我有下面这样的字符串 VIN_oFDCAN8_8d836e25_In_data; IPC_FD_1_oFDCAN8_8d836e25_In_data BRAKE_FD_2_oFDCAN8_8d836e25_In_data 我想在两者之间插入\u Moto,如下所示 VIN_oFDCAN8_8d836e25_In_Moto_data IPC_FD_1_oFDCAN8_8d836e25_In_Moto_data BRAKE_FD_2_oFDCAN8_8d836e25_In_Moto_data 但

我有下面这样的字符串

VIN_oFDCAN8_8d836e25_In_data;
IPC_FD_1_oFDCAN8_8d836e25_In_data
BRAKE_FD_2_oFDCAN8_8d836e25_In_data
我想在两者之间插入
\u 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

您能告诉我正确的方向吗?

尽管您可以在字符串中使用
的简单替换(考虑到它在您的输入文件中只出现过一次),但由于您已经特别要求在
sed
中捕获样式,您可以尝试以下操作

sed 's/\(.*_In\)\(.*\)/\1_Moto\2/g'  Input_file
上面还将添加字符串
\u Moto
,以避免在
Moto
混乱之后添加两次
\u
,感谢@Bodo在评论中提到了这一点


OP尝试的问题:由于您没有将
\
保存在
sed
的内存中,所以它只将
\(\u data\)
作为内存中的第一件事,这就是它不工作的原因,我已在上面修复了它,我们需要将所有内容都保存到
内存中,然后它就会飞起来。

尽管您可以在字符串中使用简单的替换(考虑到它在您的输入文件中只存在一次),但由于您特别要求在sed中捕获样式,您可以尝试以下操作

sed 's/\(.*_In\)\(.*\)/\1_Moto\2/g'  Input_file
上面还将添加字符串
\u Moto
,以避免在
Moto
混乱之后添加两次
\u
,感谢@Bodo在评论中提到了这一点


OP尝试的问题:由于您没有将
\
保存在
sed
的内存中,所以它将
\(\u data\)
仅作为内存中的第一件事,这就是它不工作的原因,我在上面已经修复了它,我们需要将所有内容也保存在
\
内存中,然后它就会飞起来。

在您的情况下,您可以直接用下面的命令替换匹配的字符串


回显CAN8_8d836e25_In|u data | sed's/_In_data/_In_Moto_data/'

在您的情况下,您可以直接用下面的命令替换匹配的字符串

$ 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

《代码>代码>回声VIN(echo代码>回声VIN(EchoV)是这样的东西,可以像这样的东西,可以像这样的东西。代码>代码>回声是这样的东西,可以像这样的东西,可以像这样的东西。代码>回声是这样的东西,可以像这样的东西,可以像这样的东西,可以像这样的东西,可以像这样的东西,可以像这样的东西,可以像这样的东西,可以像这样的东西,可以像这样的东西这样的东西,可以像这样的东西,可以像这样的东西,可以像这样的东西这样的东西,可以像这样的东西,可以像这样的东西,可以像这样的东西,可以像这样的东西,可以像这样的东西,可以像这样的东西,像这样的东西,像这样的东西,可以像这样的东西,可以像这样的东西,可以像这样的东西,像这样的东西,可以像这样的东西,能够回声(代码>回声(代码)是,是在8 8.8.8.8.8.8.8可能值得一提的是另一个小问题。修改后的脚本添加了
\u Moto
,但没有拖尾
\u
,以避免示例输出中的两个
\u
,这是CAN8\u 8d836e25\u Moto\uu数据的VIN\u@Bodo,感谢您让我知道,现在在我的回答中添加。可能值得一提的另一个小问题。修改后的脚本添加了
\u Moto
,没有拖尾
\u
,以避免CAN8\u 8d836e25\u Moto\uu数据的示例输出
中的两个
\u
,感谢您让我知道,现在在我的回答中添加。
$ 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