Sed 命令行为与参数处理的差异

Sed 命令行为与参数处理的差异

最近我正在对sed配置文件执行操作。我发现该命令与参数vs 的sed行为不同:- -ir-ri

[root@node system]# sed -ri 's|(^[[:space:]]+[Kk]ernel.*$)|\1 transparent_hugepage=never|' temp_file
[root@node system]# echo $?
0

[root@node system]# sed -ir 's|(^[[:space:]]+[Kk]ernel.*$)|\1 transparent_hugepage=never|' temp_file
sed: -e expression #1, char 60: invalid reference \1 on `s' command's RHS
[root@node system]# echo $?
1

答案1

选项-i采用sed选项参数,即就地编辑输入文件时用于备份文件的文件名后缀。对于 GNU sed,此选项参数是可选的,但如果提供的话显然会被使用。

使用-ir告诉sed备份文件的文件名应该是输入文件的原始名称,后缀为字符r。由于-r现在不使用,表达式的替换部分中的反向引用不再被识别为有效,因为模式中没有\( ... \)组(这是使用基本正则表达式捕获模式的一部分的方式)。

总之,sed -ri与 不一样sed -ir

相关内容