2016-09-22 99 views
0

我试图用myfile替换s#_coded_block_#中的所有模式 s#_coded_block[#]。我在网上看了关于如何更换与分组图案和我的命令是:使用sed替换模式

sed -i -E 's/s\([0-9]*\)_coded_block\[\([0-9]*\)\]/s\1_coded_block_\2/g' myfile 

不过,我对'S'

命令的RHS当越来越

无效引用\ 2我执行这个命令。

+0

你会提供你想要替换的样本数据吗? –

+2

删除-E并尝试 –

回答

1

随着-E选项,你不要在捕获括号之前需要反斜杠:

sed -i -E 's/s([0-9]*)_coded_block\[([0-9]*)\]/s\1_coded_block_\2/g' myfile 

您可能需要一个或更多的数字,在这种情况下,你使用+而不是*。如果您决定删除-E,你原来的代码应工作,但如果你想至少一个数字,你需要写\{1,\}

sed -i 's/s\([0-9]\{1,\}\)_coded_block\[\([0-9]\{1,\}\)\]/s\1_coded_block_\2/g' myfile 

所示-i符号只与GNU sed可靠地工作。 BSD(macOS或Mac OS X)sed会将第一个命令行中的-E作为后缀(在第二个中,您会收到关于m不是有效的sed命令的投诉,因为该脚本将被视为后缀,并且如果您想要便携式代码,请使用-i.bak,这会创建一个包含两种变体的备份文件 - 必须附加.bak(可能需要附加)。到-i GNU sed

+0

非常感谢你,它的工作原理! – slin6174