sed 修改/替换文件内容

2021-08-26  本文已影响0人  relax_小罗罗

最近在写SH脚本,实现一键部署,其中有些环境参数是会随着现场实际情况改变而变跟的,或者说修改一些配置文件的选项值,最终找到我们的sed 命令来解决(echo "">> filename 只能添加到文件最后)

案例如下:

替换变量

sed -i "s/SELINUX=enforcing/SELINUX=disabled /g" /etc/selinux/config

替换变量时如果是如'/'符号 要加''转义来处理 比如

sed -i "s/fileBaseUrl:'http:\/\/ip:port'/fileBaseUrl:'http:\/\/${host_ip}'/g" nginx/html/public/config.js

在第一行前插入文本

sed -i '1 i\插入字符串' datafile

在最后一行后插入文本

sed -i '$ a\插入字符串' datafile

在匹配行前插入一行

sed -i '/pattern/ i "插入字符串"'' datafile

在匹配行后插入一行

sed -i '/pattern/ a "插入字符串"' datafile

其他命令详解在下方给大家参考参考

sed 命令解释如下:

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

  -n, --quiet, --silent
                 取消自动打印模式空间
  -e 脚本, --expression=脚本
                 添加“脚本”到程序的运行列表
  -f 脚本文件, --file=脚本文件
                 添加“脚本文件”到程序的运行列表
  --follow-symlinks
                 直接修改文件时跟随软链接
  -i[SUFFIX], --in-place[=SUFFIX]
                 edit files in place (makes backup if SUFFIX supplied)
  -c, --copy
                 use copy instead of rename when shuffling files in -i mode
  -b, --binary
                 does nothing; for compatibility with WIN32/CYGWIN/MSDOS/EMX (
                 open files in binary mode (CR+LFs are not treated specially))
  -l N, --line-length=N
                 指定“l”命令的换行期望长度
  --posix
                 关闭所有 GNU 扩展
  -r, --regexp-extended
                 在脚本中使用扩展正则表达式
  -s, --separate
                 将输入文件视为各个独立的文件而不是一个长的连续输入
  -u, --unbuffered
                 从输入文件读取最少的数据,更频繁的刷新输出
  -z, --null-data
                 separate lines by NUL characters
  --help
                 display this help and exit
  --version
                 output version information and exit

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

我们要使用的一般都是-e 或者 -i 其他的不怎么常用。关键点在于中间的脚本;
脚本详情如下:

a\  在当前行后添加一行或多行
c\  用新文本修改(替换)当前行中的文本
d   删除行
i\  在当前行之前插入文本
h   把模式空间里的内容复制到暂存缓存区
H   把模式空间里的内容追加到暂存缓存区
g   取出暂存缓冲区里的内容,将其复制到模式空间,覆盖该处原有内容
G   取出暂存缓冲区里的内容,将其复制到模式空间,追加在原有内容后面
l   列出非打印字符
p   打印行
n   读入下一输入行,并从下一条命令而不是第一条命令开始处理
q   结束或退出 sed
r   从文件中读取输入行
!   对所选行意外的所有行应用命令
s   用一个字符串替换另一个

g   在行内进行全局替换
p   打印行
w   将行写入文件
x   交换暂存缓冲区与模式空间的内容
y   将字符转换为另一字符(不能对正则表达式使用 y 命令)
image.png

参考地址:https://www.cnblogs.com/ginvip/p/6376049.html

上一篇 下一篇

猜你喜欢

热点阅读