![Sed 命令行为与参数处理的差异](https://linux22.com/image/115834/Sed%20%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%B8%BA%E4%B8%8E%E5%8F%82%E6%95%B0%E5%A4%84%E7%90%86%E7%9A%84%E5%B7%AE%E5%BC%82.png)
最近我正在对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
。