sed 命令
· 阅读需 2 分钟
sed 可以在不打开编辑器的情况下,对文件进行精准的增删改。
sed -i
替换
sed -i 's/旧/新/g' path: /s 表示替换, /g 表示全局匹配
# 全局替换
sed -i 's/listen 80/listen 8080/g' nginx.conf
# 只替换 10-20 行之间的内容
sed -i '10,20s/listen 80/listen 8080/g' nginx.conf
# 指定 # 作为分隔符
sed -i 's#/var/log/nginx#/data/logs/nginx#g' docker-compose.yml
删除
/d 删除整行
# 删除包含 DEBUG 字符的行
sed -i '/DEBUG/d' application.log
# 删除第 5 行
sed -i '5d' application.log
# 删除从第 5 行到文件末尾(用$表示)
sed -i '5,$d' application.log
# 删除所有空行
sed -i '/^$/d' application.log
注释
'/搜索模式/s/旧/新/':先找到包含特定字符串的那一行,然后只在这一行内执行替换操作
# 将包含 "PasswordAuthentication" 的行注释掉
sed -i '/PasswordAuthentication/s/^/# /' /etc/ssh/sshd_config
# 开启系统 IP 转发(常用于 VPN 或 K8s 节点配置)
sed -i '/net.ipv4.ip_forward/s/^#\s*//' /etc/sysctl.conf
插入
/a (append)在匹配到的行的下面新增内容, /i (insert)在匹配行上面新增内容.
# 在 "[mysqld]" 这一行下面添加最大连接数配置
sed -i '/\[mysqld\]/a max_connections = 1000' my.cnf
# 在定义 server_name 的行前面插入一条 listen 指令
sed -i '/server_name/i listen 443 ssl;' blog.conf