sed命令参数之-r -i
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 对于初学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参数当作备份名的后缀名了,造成我们的正则匹配失效 |
本文来自博客园,作者:萱乐庆foreverlove,转载请注明原文链接:https://www.cnblogs.com/leleyao/p/10431307.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步