用 sed 导致的一个悲剧: sed -i -n 's/aaa/bbb/' file 把我的 file 们全清空了! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
giskard

用 sed 导致的一个悲剧: sed -i -n 's/aaa/bbb/' file 把我的 file 们全清空了!

  •  
  •   giskard Jun 8, 2016 5189 views
    This topic created in 3613 days ago, the information mentioned may be changed or developed.
    有一系列文件,需要将其中的一个关键词 aaa 替换成 bbb ,于是 shell 里写了个简单的循环,用 sed 来替换。想当然地认为,'-i' 选项直接修改本地文件,‘-n ’ 选项取消默认的打印,于是我就写下了标题的那个命令

    sed -i -n 's/aaa/bbb/' file

    运行结束以后, file 空了,什么都没了。

    好在不是很重要的文件,而且有备份,可是为什么?我搜了一圈也没有找到清楚的解释。
    请 sed 大神指教
    6 replies    2018-03-15 15:24:02 +08:00
    fcicq
        1
    fcicq  
       Jun 8, 2016   1
    sed 通常用 -e, 而 -n 是 silent / quiet 应该慎用啊.
    xdazz
        2
    xdazz  
       Jun 8, 2016   1
    你可以这样理解, '-i' 是把打印出来的内容写入原文件, '-n' 取消了打印出来的内容。 '-i' 和 '-n' 一起用的结果就是清空原文件了。

    你可以明确指定要打印内容,指定 p 就可以了。
    举个例子:
    sed -i -n 's/aaa/bbb/p' file

    这样其实和 sed -i 's/aaa/bbb/' file 是一样效果。

    要用到 p 得多条指令才有意义。 's/aaa/bbb/;p;s/ccc/ddd/' 之类只要 aaa 替换为 bbb 的结果的时候。
    beyond_st
        3
    beyond_st  
       Jun 8, 2016
    这样其实和 sed -i 's/aaa/bbb/' file 是一样效果。 +1
    giskard
        4
    giskard  
    OP
       Jun 11, 2016
    @xdazz 谢谢,明白了。
    giskard
        5
    giskard  
    OP
       Jun 11, 2016
    @fcicq 是,-n 慎用,情愿让它在终端上多输出一些内容
    qq1147
        6
    qq1147  
       Mar 15, 2018
    我也遇到这问题了,专门注册账号回复一下。。。
    -n 或--quiet 或 silent:仅显示 script 处理后的结果;
    如果你的脚本没有对之前的内容进行操作,那个没有修改的内容就不会被显示出来,然后-i 就不会将这些内容写进去
    让我郁闷的就是-i 命令居然不是 append,而会删除原来的内容。。。这也太不人性化了
    About     Help     Advertise     Blog     API     FAQ     Solana     842 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 21:29 PVG 05:29 LAX 14:29 JFK 17:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86