在写Shell脚本的时候经常会用到修改文件
比如配置文件configure

#!/bin/sh

FFMPEG_UPSTREAM=https://github.com/FFmpeg/FFmpeg.git
X264_UPSTREAM=http://git.videolan.org/git/x264.git

FFMPEG_LOCAL_REPO=liblocal

之前一直用的替换方法比较Low

conf=$(cat configure)
conf=${conf//liblocal/libffmpeg}
echo $conf > configure

后来发现这种方式替换文件,文件的格式会混乱(对格式没有严格要求的可以用这种方法)
这里写图片描述

后来发现是用sed命令效果更好

sed -i 's/liblocal/libffmpeg/g' configure

这里写图片描述

输出格式没变

我们可以来看看sed的帮助

sed --help

输出使用详情

用法: sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...

  -n, --quiet, --silent
                 取消自动打印模式空间
  -e 脚本, --expression=脚本
                 添加“脚本”到程序的运行列表
  -f 脚本文件, --file=脚本文件
                 添加“脚本文件”到程序的运行列表
  --follow-symlinks
                 直接修改文件时跟随软链接
  -i[SUFFIX], --in-place[=SUFFIX]
                 edit files in place (makes backup if SUFFIX supplied)
  -l N, --line-length=N
                 指定“l”命令的换行期望长度
  --posix
                 关闭所有 GNU 扩展
  -r, --regexp-extended
                 在脚本中使用扩展正则表达式
  -s, --separate
                 将输入文件视为各个独立的文件而不是一个长的连续输入
  -u, --unbuffered
                 从输入文件读取最少的数据,更频繁的刷新输出
  -z, --null-data
                 separate lines by NUL characters
      --help     打印帮助并退出
      --version  输出版本信息并退出

如果没有 -e, --expression, -f 或 --file 选项,那么第一个非选项参数被视为
sed脚本。其他非选项参数被视为输入文件,如果没有输入文件,那么程序将从标准
输入读取数据。

GNU版sed主页: <http://www.gnu.org/software/sed/>。
使用GNU软件所需帮助文档: <http://www.gnu.org/gethelp/>。
将错误报告通过电子邮件发送到:<bug-sed@gnu.org>.
请务必将单词“sed”放在标题的某处。

sed -i 's/abc/xxx/g' file

这里的
-i直接修改并保存
abc表示待替换的字符串
xxx表示修改后的字符串
file表示文件

\s表示空格的转义

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐