2.2.2 修改实践
学习目标
这一节,我们从 多点操作、增改实践、小结 三个方面来学习
多点操作
简介
我们可以借助 '动作1;动作2' 或者 -e '动作1' -e '动作2' 的方式实现多操作的并行实施
实践1-内容的过滤编辑
不显示所有空行和注释信息
[root@localhost ~]# sed '/^#/d;/^$/d' nginx.conf
worker_processes 1;
http {
sendfile on;
keepalive_timeout 65;
server {
listen 8000;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
}
先剔除空行,然后不显示所有包含注释的信息
[root@localhost ~]# sed -rn '/^$/d;/^[[:space:]]*#/!p' nginx.conf
worker_processes 1;
http {
sendfile on;
keepalive_timeout 65;
server {
listen 8000;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
}
实践2-借助于 i.bak 方式对有效信息进行过滤
编辑文件的时候,原内容备份到一个额外的文件
[root@localhost ~]# sed -i.bak '/^#/d;/^$/d' nginx.conf
[root@localhost ~]# cat nginx.conf
worker_processes 1;
http {
sendfile on;
keepalive_timeout 65;
server {
listen 8000;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
}
[root@localhost ~]# grep '#' nginx.conf.bak
#user nobody;
增改实践
实践1-借助于&符号实现内容的扩充式更改编辑
查看原内容
[root@localhost ~]# head -n 1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
对原内容进行扩充替换
[root@localhost ~]# head -n 1 /etc/passwd | sed -n 's/root/&user/1p'
rootuser:x:0:0:root:/root:/bin/bash
[root@localhost ~]# head -n 1 /etc/passwd | sed -n 's/root/&user/gp'
rootuser:x:0:0:rootuser:/rootuser:/bin/bash
实践2-借助于s实现内容的替换式更改编辑
获取没有被注释的信息
[root@localhost ~]# sed -n '/^#/!p' /etc/fstab
UUID=5583bd7c-cc9f-4e19-b453-c224102f3ed5 / xfs defaults 0 0
UUID=cbd246cd-1df8-4fe7-9040-823cd0978837 /boot xfs defaults 0 0
将注释的信息进行替换
[root@localhost ~]# sed -rn '/^#/!s@^@#@p' /etc/fstab
#
#UUID=5583bd7c-cc9f-4e19-b453-c224102f3ed5 / xfs defaults 0 0
#UUID=cbd246cd-1df8-4fe7-9040-823cd0978837 /boot xfs defaults 0 0
实践3-借助于 i|a 对文件进行 插入|追加 式更改编辑
基于内容匹配相关信息并打印
[root@localhost ~]# sed -n '/listen/p' nginx.conf
worker_processes 1;
http {
sendfile on;
keepalive_timeout 65;
server {
listen 8000;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
}
基于内容匹配追加1行内容
[root@localhost ~]# sed '/listen/a\\tlisten\t\t80;' nginx.conf
worker_processes 1;
http {
sendfile on;
keepalive_timeout 65;
server {
listen 8000;
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
}
基于内容匹配插入2行内容 -- 借助于\n的换行功能,将1行变成两行
[root@localhost ~]# sed '/listen/i\\tlisten\t\t80;\n\tlisten\t\t8080;' nginx.conf
worker_processes 1;
http {
sendfile on;
keepalive_timeout 65;
server {
listen 80;
listen 8080;
listen 8000;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
}
实践4-借助于 环境变量和s|c 对文件进行 修改|替换 式更改编辑
定制环境变量
[root@localhost ~]# port=8080
使用多点修改
[root@localhost ~]# sed -r -e "s/listen.*;/listen\t$port;/" -e '/server_name/c \\tserver_name '$(hostname):$port';' nginx.conf
worker_processes 1;
http {
sendfile on;
keepalive_timeout 65;
server {
listen 8080;
server_name localhost:8080;
location / {
root html;
index index.html index.htm;
}
}
}
注意:
这里涉及到环境变量的解读,千万不要被单引号转义了