sed命令参数之-r -i

对于初学linux的朋友来说,能记住命令附带的一大帮参数就以及非常不容易了。好不容易把该用的参数都想全了。sed  -irns 后面一大片脚本 ,一执行出错了 what!!!!
创建一下测试环境 
head /etc/passwd > 1
cat 1
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
sed -ir '3,9s/(.*)/#1/g'  1
然后就出坑了
sed: -e expression #1, char 16: invalid reference 1 on `s' command's RHS
非法参数 1 然后抓破头 没错啊
问题就出在参数的顺序上
同样我们执行
sed -ri '3,9s/(.*)/#1/g' 1
[root@fortestonly ~]# cat 1
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#sync:x:5:0:sync:/sbin:/bin/sync
#shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
#halt:x:7:0:halt:/sbin:/sbin/halt
#mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
ok我们成功了
那问题出在哪里了显然我们r参数他没干活啊,那他去哪里了
这时候你在当前目录使用 ls 1* 命令
1  1r 
这个1r是哪来的cat查看一下竟然和我们的1原来的内容一样
这时候仔细参读我们的-i参数
SUFFIX], --in-place[=SUFFIX]
              edit  files in place (makes backup if
              extension  supplied).   The   default
              operation  mode  is to break symbolic
              and hard links.  This can be  changed
              with --follow-symlinks and --copy.
我们r参数当作备份名的后缀名了,造成我们的正则匹配失效

  

原文地址:https://www.cnblogs.com/leleyao/p/10431307.html