shell脚本的sed指令的问题?

看到命令有写成sed -i'' "s#aaa#bbb#g"这样的,不明白-i后面的''是什么意思?

阅读 2.2k
2 个回答
  1. 没有 -i 参数;直接输出替换后的内容到标准输出,原文件内容不变。

    $ cat 1.txt
    aaa
    $ sed "s#aaa#bbb#g" 1.txt
    bbb
    $ cat 1.txt
    aaa
  2. -i,同 -i''(-i后加空字符串);不输出到标准输出,直接操作原文件内容。

    $ cat 1.txt
    aaa
    # 或 sed -i "s#aaa#bbb#g" 1.txt
    $ sed -i'' "s#aaa#bbb#g" 1.txt
    $ cat 1.txt
    bbb
  3. -i[SUFFIX]--in-place[=SUFFIX];不输出到标准输出,以原文件名+SUFFIX备份原文件,原文件内容为替换后的内容。

    $ ls
    1.txt
    $ cat 1.txt
    aaa
    # 或 sed --in-place='.bak' "s#aaa#bbb#g" 1.txt
    $ sed -i'.bak' "s#aaa#bbb#g" 1.txt
    $ ls
    1.txt      1.txt.bak
    $ cat 1.txt
    bbb
    $ cat 1.txt.bak
    aaa

PS: 上面的操作原文件的部分,在实现时,操作之后只是文件名相同,底层 inode结点 不是同一个,可以用 ls -i 命令观察到。

   -i[SUFFIX], --in-place[=SUFFIX]

         edit files in place (makes backup if SUFFIX supplied)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题