华为云之在ECS云服务器上Sed命令学习实践【玩转华为云】

举报
江湖有缘 发表于 2024/08/17 21:11:37 2024/08/17
【摘要】 华为云之在ECS云服务器上Sed命令学习实践【玩转华为云】

一、本次实践介绍

1.1 实践环境简介

1.本次实践环境使用华为KooLabs云实验平台。
2.本次实践基于华为云ECS弹性云服务器。
3.在ECS云服务器上使用sed命令。

1.3 本次实践完成目标

  • 熟悉华为云ECS服务器
  • 熟练使用Linux系统环境
  • 学会sed命令的基本使用

二、 相关服务介绍

2.1 华为云ECS云服务器介绍

弹性云服务器(Elastic Cloud Server, ECS)是一种云上可随时自助获取、可弹性伸缩的计算服务,可帮助您打造安全、可靠、灵活、高效的应用环境。

image.png

2.2 sed命令介绍

sed(流编辑器)是一个流式文本编辑器,常用于对文本文件进行替换、删除、插入等操作。它是Unix和类Unix系统中的标准工具之一。sed可以通过命令行参数或脚本文件来操作文件内容,并且可以将结果输出到标准输出或者直接修改原始文件。

三、环境准备工作

3.1 预置实验环境

1.开始实验之前请点击手册上方“预置实验环境”按钮。
2.实验环境约等待【2分钟】后预置成功。环境预置成功会自动创建一台名称为 ecs-name 的弹性云服务器 ECS。

在这里插入图片描述

3.2 查看预置环境信息

预置成功后ECS资源用户、密码信息可点击预置环境信息查看。

在这里插入图片描述

四、登录华为云

4.1 登录华为云

进入【实验操作桌面】,打开Chrome浏览器,首次可自动登录并进入华为云控制台页面。

在这里插入图片描述

登录完毕后,进入华为云控制台管理首页。

在这里插入图片描述

4.2 查看ECS状态

在华为云的首页服务列表中,点击“弹性云服务器ECS”,进入ECS云服务器管理页面。

在这里插入图片描述

在ECS管理页面,我们看到系统已经为我们创建了一台ECS弹性云服务器,名称为ecs-name。

在这里插入图片描述

4.3 连接ECS弹性云服务器

在实验桌面,打开xfce终端,将ECS的弹性公网IP地址替换即可。

ssh root@ECS弹性公网IP地址

在这里插入图片描述

4.4 检查操作系统版本

检查当前系统版本,当前默认安装使用的是Centos7版本。

[root@ecs-name ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"



五、初识sed命令

5.1 认识sed工具的基本选项

sed命令的常用选项如下:

  • -n(屏蔽默认输出,默认sed会输出读取文档的全部内容)
  • -r(让sed支持扩展正则)
  • -i(sed直接修改源文件,默认sed只是通过内存临时修改文件,源文件无影响)

5.2 sed命令的-n选项

执行p打印等过滤操作时,希望看到的是符合条件的文本。但不使用任何选项时,默认会将原始文本一并输出,从而干扰过滤效果。比如,尝试用sed输出/etc/hosts的第1行:

sed '1p' /etc/hosts

在这里插入图片描述

可以发现所有的行都被显示出来了(第1行重复2次)。—— 正确的用法应该添加 -n 选项,这样就可以只显示第1行了:

sed -n '1p' /etc/hosts

在这里插入图片描述

行号可以是连续的行号,如打印passwd第3到第6行账户的信息:

sed  -n '3,6p' /etc/passwd

在这里插入图片描述

5.3 sed命令的 -i 选项

正常情况下,sed命令所做的处理只是把操作结果(包括打印、删除等)输出到当前终端屏幕,而并不会对原始文件做任何更改:

  • 删除所有行
sed 'd' /etc/passwd
  • 查看原始文本,并未改动。
cat /etc/passwd

在这里插入图片描述

  • 首先创建一个test.txt文件
vim test.txt
  • 编辑以下内容:
hello world
The file is a test file
HUAWEI CLOUD sandbox platform
What is experienced today is the use of the sed tool
Leftover after deletion

在这里插入图片描述

  • 测试删除test.txt的第1~4行:
sed -i '1,4d' test.txt
  • 确认删除结果
cat test.txt

在这里插入图片描述

5.4 多个指令可以使用分号隔离

多个指令可以使用分号隔离

sed -n '1p;4p' /etc/passwd

在这里插入图片描述

六、认识sed工具的条件

6.1 行号案例实践

sed [选项] '条件指令' 文件.. ..sed命令可以使用行号或正则做为条件匹配:
  • 打印第3行
sed -n '3p' /etc/passwd

在这里插入图片描述

  • 打印第3到5行:
sed -n '3p;5p' /etc/passwd

在这里插入图片描述

  • 打印奇数行:
sed -n '1~2p' /etc/passwd

在这里插入图片描述

  • 打印偶数行:
sed -n '2~2p' /etc/passwd

在这里插入图片描述

6.2 正则案例

  • 打印包含root的行:
[root@ecs-name ~]# sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

在这里插入图片描述

  • 打印bash结尾的行:
[root@ecs-name ~]# sed -n '/bash$/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash

在这里插入图片描述

  • 没有条件,则表示匹配所有行
[root@ecs-name ~]# sed -n 'p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin

在这里插入图片描述

七、sed工具的p、d、s操作指令案例集合

7.1 sed工具的p指令案例集锦

复制测试文件

cp /etc/passwd  passwd.txt
  • 输出所有行,等同于cat a.txt
sed  -n 'p' passwd.txt

在这里插入图片描述

  • 输出第4行
[root@ecs-name ~]# sed  -n '4p' passwd.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin

  • 输出第4到7行
[root@ecs-name ~]# sed  -n '4,7p' passwd.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

在这里插入图片描述

  • 输出以bin开头的行
[root@ecs-name ~]# sed  -n '/^bin/p' passwd.txt
bin:x:1:1:bin:/bin:/sbin/nologin

  • 输出文件的行数
[root@ecs-name ~]# sed  -n '$=' passwd.txt
20

在这里插入图片描述

7.2 sed工具的d指令案例集锦

  • 删除第3~5行
[root@ecs-name ~]# sed  '3,5d' passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin

在这里插入图片描述

  • 删除所有包含mail的行
[root@ecs-name ~]# sed  '/mail/d' passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin

在这里插入图片描述

  • 删除不包含mail的行,!符号表示取反
[root@ecs-name ~]# sed  '/mail/!d' passwd.txt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

  • 删除以games开头的行
[root@ecs-name ~]# sed  '/^games/d' passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin

  • 删除文件的最后一行
[root@ecs-name ~]# sed  '$d' passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin

在这里插入图片描述

  • 删除所有空行
sed  '/^$/d' /etc/hosts

在这里插入图片描述

7.3 sed命令的s替换基本功能

编辑以下文本测试内容

vim  test1.txt
2023 2018 2022
2023 2023 2027
2023 2023 2023
  • 把所有行的第1个2023替换成xxxx
[root@ecs-name ~]# sed 's/2023/xxxx/' test1.txt
xxxx 2018 2022
xxxx 2023 2027
xxxx 2023 2023

  • 所有行的所有的2023都替换xxxx
[root@ecs-name ~]# sed 's/2023/xxxx/g' test1.txt
xxxx 2018 2022
xxxx xxxx 2027
xxxx xxxx xxxx

  • 把所有行的第2个2023替换成xxxx
[root@ecs-name ~]# sed 's/2023/xxxx/2' test1.txt
2023 2018 2022
2023 xxxx 2027
2023 xxxx 2023

  • 把所有行的第2个2023替换成空
[root@ecs-name ~]# sed 's/2023//2' test1.txt
2023 2018 2022
2023  2027
2023  2023

在这里插入图片描述

八、使用sed修改系统配置

8.1 编写anonftp.sh脚本

编写anonftp.sh脚本,用来装配匿名FTP服务

vim anonftp.sh
#!/bin/bash
yum -y install vsftpd                             
cp /etc/vsftpd/vsftpd.conf{,.bak}                 
sed -i "s/^#anon/anon/" /etc/vsftpd/vsftpd.conf      
chmod 777 /var/ftp/pub                             
systemctl start vsftpd                              
systemctl enable vsftpd
sh anonftp.sh

在这里插入图片描述

8.2 查看服务状态

  • 查看vsftpd服务状态
systemctl status vsftpd

在这里插入图片描述

九、sed多行文本处理

9.1 修改主机名配置文件

  • 修改前配置
[root@ecs-name ~]# cat /etc/hostname
ecs-name

  • 使用sed修改主机名配置所在行的内容(c整行替换)
[root@ecs-name ~]# sed  '1c myecs.huawei' /etc/hostname
myecs.huawei

9.2 修改hosts文件

  • 查看hosts文件
[root@ecs-name ~]# cat /etc/hosts
::1	localhost	localhost.localdomain	localhost6	localhost6.localdomain6
127.0.0.1	localhost	localhost.localdomain	localhost4	localhost4.localdomain4
127.0.0.1	ecs-name	ecs-name

  • 使用sed修改hosts文件,添加两行新纪录(a追加)
[root@ecs-name ~]# sed  -i  '$a 192.168.0.108  myecs.huawei'  /etc/hosts
[root@ecs-name ~]# 
[root@ecs-name ~]# cat /etc/hosts
::1	localhost	localhost.localdomain	localhost6	localhost6.localdomain6
127.0.0.1	localhost	localhost.localdomain	localhost4	localhost4.localdomain4
127.0.0.1	ecs-name	ecs-name

192.168.0.108  myecs.huawei

在这里插入图片描述

十、sed综合脚本应用

10.1 编辑getupwd.sh脚本

vim getupwd.sh
#/bin/bash
A=$(grep "bash$" /etc/passwd | sed 's/:.*//') ## 提取符合条件的账号记录
for i in $A ##遍历账号记录
do
pass1=$(grep $i /etc/shadow)
pass2=${pass1#*:}
pass=${pass2%%:*}
echo "$i --> $pass"
done

10.2 执行脚本

测试、验证执行结果

sh getupwd.sh

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。