linux sed命令详解,1.10-linux三剑客之sed命令详解及用法

本文详细介绍了SED命令的基础知识、语法格式及常见应用场景。包括文本查询、增加、替换、批量修改文件名等功能,并通过实例演示了SED命令的具体用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容:

1.sed命令介绍

2.语法格式,常用功能

查询  增加  替换 批量修改文件名

第1章sed是什么

字符流编辑器 Stream Editor

第2章sed功能与版本

处理出文本文件,日志,配置文件等

增加,删除,修改,查询

sed  --version

sed  -i 修改文件内容

第3章语法格式

3.1语法格式

sed [选项] [sed指令] [输入文件]

sed -i.bak 's#oldboy#oldgril#g' oldbboy.txt

先备份在修改

-i   ---sed的参数

修改

-s    --sed指令

g   ---小尾巴/修饰

sed  找谁  干啥

找谁----条件(查找)

干啥----命令  替换 删除  增加

8ede02f98da860783ede374f95d60ba7.png

3.2命令执行过程

6627f2fb2b69f7c567e45722791d706b.png

sed 特性:默认输出

-n 取消默认输出

模式空间:内存中专门为sed腾出的一块地

第4章常用功能

4.1查询:

4.1.1#单行-行号

显示第几行

[root@oldboyedu43-lnb oldboy]# sed -n '3p' person.txt

103,Alex,COO

显示包含oldboy的行

#包含oldboy的行

[root@oldboyedu43-lnb oldboy]# sed -n '/oldboy/p' person.txt

101,oldboy,CEO

‘//’//内支持正则表达式         过滤内容

4.1.2多行 连续

找出第1到3行

sed -n‘1,3p  person.ttx’

#显示包含oldboy的行到包含yy的行

[root@oldboy-gao oldboy]# sed -n '/oldboy/,/yy/p' person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

显示文件的第1,4,5行

[root@oldboy-gao oldboy]# sed -n '1p;4p;5p' person.txt

101,oldboy,CEO

104,yy,CFO

105,feixue,CIO

同一行多条命令用;(分号)分隔

小结:

1.行号

2.正则表达式‘//p’

3.范围‘/oldboy/,/yy/’

4.2增加

4.2.1多行增加:  \n 换行符(三种方法)

1.文件的最后一行增加两行106,wuxingge,UFO107,lee,XO

1)echo

echo -e "106,wuxingge,UFO\n107,lee,XO" >>person.txt

2)cat

[root@oldboy-gao oldboy]# cat >>person.txt <

106,wuxingge,UFO

107,lee,XO

ha

3)sed    行号a在文件中某一行追加内容

[root@oldboy-gao oldboy]# sed  '$a106,wuxingge,UFO\n107,lee,XO' person.txt   最后一行

a ===  append     追加--下一行

i ==== insert       插入-----上一行

错误

[root@oldboy-gao oldboy]# sed '2a gyf is a student\nhe's a good boy' person.txt

> ^C

三个单引号乱了

解决:单引号换双引号

删除    d      一行

4.2.2不显示文件中空行

grep -v '^$' person.txt

sed '/^$/d' person.txt

awk '!/^$/' person.txt

sed -n '/^$/!p' person.txt

!(叹号) sed  awk  find中表示取反

4.3替换

4.3.1不加g  将每一行中第一处匹配的字符串进行替换

[root@oldboy-gao oldboy]# cat person.txt

101,oldboy,CEO

[root@oldboy-gao oldboy]# sed 's#[1-9]#AAA#g' person.txt|egrep -v '^$'

AAA0AAA,oldboy,CEO

加g --global  每一行进行全部替换---> sed指令s的替换标志之一(全局替换)

[root@oldboy-gao oldboy]# sed 's#[1-9]#AAA#' person.txt|egrep -v '^$'

AAA01,oldboy,CEO

4.3.2sed 先备份在修改文件内容

sed  -i.bak‘s#[1-9]#AAA#g’person.txt

先把文件备份为person.txt.bak

然后再修改文件内容

4.3.3变量替换     双引号识别     ###  把###之间定义变量

[root@oldboyedu43-lnb oldboy]# x=oldboy定义x   y 两个变量

[root@oldboyedu43-lnb oldboy]# y=oldgirl

[root@oldboyedu43-lnb oldboy]# sed "s#$x#$y#g" person.txt$x   $y    应用变量

101,oldgirl,CEO

102,zhangyao,CTO

2.后项引用

1)把匹配到的内容按规定格式形式

[root@oldboy-gao oldboy]# echo '123456'|sed -r 's#(.*)##g'

<123456>

2)引用前面匹配到的内容

[root@oldboy-gao oldboy]# echo '123456'|sed -r 's#(.*)##g'

<123456>

新方法 :&表示前面正则匹配到的内容

[root@oldboy-gao oldboy]# echo '123456'|sed 's#.*##g'

<123456>

前面每个数字都加上< >号

[root@oldboy-gao oldboy]# echo '123456'|sed 's#.##g'

<1><2><3><4><5><6>

4.4新案列:批量修改文件名    命令的拼接

把.jpg修改为.avi

-rw-r--r--. 1 root root 0 Jan 10 00:24 oldboy01.jpg

-rw-r--r--. 1 root root 0 Jan 10 00:24 oldboy02.jpg

-rw-r--r--. 1 root root 0 Jan 10 00:24 oldboy03.jpg

-rw-r--r--. 1 root root 0 Jan 10 00:24 oldboy04.jpg

-rw-r--r--. 1 root root 0 Jan 10 00:24 oldboy05.jpg

4.4.1方法一:命令拼接

[root@oldboy-gao oldboy]# ls *.jpg|sed -r 's#(.*)jpg#mv & \1avi#g'

mv oldboy01.jpg oldboy01.avi

mv oldboy02.jpg oldboy02.avi

|bash   把前面的输出交给bash(命令解释器)执行

[root@oldboy-gao oldboy]# ls *.jpg|sed -r 's#(.*)jpg#mv & \1avi#g'|bash

[root@oldboy-gao oldboy]# ls *.avi

oldboy01.avi  oldboy03.avi  oldboy05.avi  oldboy07.avi  oldboy09.avi

oldboy02.avi  oldboy04.avi  oldboy06.avi  oldboy08.avi  oldboy10.avi

小结:

1.命令拼接--解决不会循环

2.先在屏幕上拼接出目标命令--最终交给bash执行

4.4.2方法二:rename

rename  from                 to                file

你要替换的内容       替换成什么        替换哪些文件

jpg                  avi                *.jpg

[root@oldboy-gao oldboy]# rename jpg avi *.jpg

[root@oldboy-gao oldboy]# ls *.avi

oldboy01.avi  oldboy03.avi  oldboy05.avi  oldboy07.avi  oldboy09.avi

oldboy02.avi  oldboy04.avi  oldboy06.avi  oldboy08.avi  oldboy10.avi

sed用法小结:

1.排除!

2.特殊符号===获取行号=

3.一条sed语句执行多条命令;

4.5sed命令常见的坑-ri和-ir

4.5.1-r与-i同时使用

***-r参数必须在前面

-ri

正常

-ir

先把文件备份为xxxr

然后再替换文件中的内容

4.5.2-i禁止与-n一起使用

会把原文件内容清空

<think>好的,用户让我整理一份新手学习Linux的路径。首先,我需要考虑用户是完全的新手,可能对计算机系统的基础了解有限。他们可能对命令行操作不熟悉,甚至从未接触过Linux环境。因此,学习路径需要从最基础的部分开始,逐步深入,避免一开始就涉及复杂的系统管理或编程内容。 第一步应该是介绍Linux的基本概念和安装方法。用户需要明白Linux是什么,有哪些常见的发行版,比如Ubuntu、CentOS等,以及如何在自己的电脑上安装或者通过虚拟机体验。这部分要简单明了,避免技术术语过多,让用户能够顺利上手实际操作。 接下来是基础命令的学习。用户需要掌握常见的命令行操作,如文件和目录管理(ls, cd, mkdir, rm等)、文本处理(cat, grep, sed)、权限管理(chmod, chown)。这部分可以通过分阶段教学,先介绍最常用的命令,再逐步扩展。同时,推荐一些练习平台,比如在浏览器中直接练习,减少环境配置的压力。 然后是系统管理的基础知识,包括用户和组管理、软件包管理(apt, yum)、进程管理(ps, top, kill)以及日志查看。这部分内容可能对新手来说有点挑战,需要结合具体的例子和实际场景,比如如何安装软件,如何查看系统资源使用情况。 网络配置和Shell脚本编写也是重要的一环。用户需要了解基本的网络命令(ifconfig, ping, netstat),防火墙配置,以及如何编写简单的Shell脚本来自动化任务。这部分可以引导用户通过实际案例来学习,比如编写备份脚本或自动化部署脚本。 之后是进阶内容,包括系统服务管理(systemd)、安全设置(SSH配置、防火墙)、磁盘管理(fdisk, mount)和性能监控工具(vmstat, iostat)。这些内容需要用户有一定的基础,因此需要在前面的基础上逐步引入,确保用户能够跟上。 推荐学习资源时,要考虑多样性和可访问性。官方文档、在线平台(如菜鸟教程、实验楼)、书籍(《鸟哥的Linux私房菜》)以及社区论坛(Stack Overflow、知乎)都是不错的选择。同时,建议用户通过项目实践来巩固知识,比如搭建个人网站或配置开发环境,这样可以将所学知识应用到实际中,增强理解和记忆。 最后,强调持续学习的重要性,建议用户参与开源项目或考取认证,如RHCE、LPIC,以进一步提升技能。整个路径需要结构清晰,循序渐进,避免信息过载,同时提供足够的实践机会,帮助用户逐步建立信心和技能。</think>以下是为零基础学习者整理的Linux系统学习路径(分阶段递进,附实践建议): 一、入门准备阶段(1-2周) 1. 理解Linux基本概念 - 与Windows的主要区别(开源、权限机制、软件生态) - 常见发行版特点:Ubuntu(易用)、CentOS(服务器常用)、Debian(稳定) 2. 环境搭建(任选一种) - 双系统安装(适合有备用电脑) - 虚拟机方案(推荐VirtualBox + Ubuntu) - 云服务器体验(阿里云/腾讯云新人套餐) - 在线实验平台(推荐https://www.labex.io/) 二、基础命令阶段(3-4周) 1. 文件系统操作 ```bash # 核心命令组合练习 mkdir project && cd project # 创建并进入目录 touch demo.txt # 创建文件 echo "Hello Linux" > demo.txt cat demo.txt | grep "Linux" # 管道过滤 sudo chmod 755 demo.txt # 权限修改 ``` 2. 文本处理三剑客 - grep(文本搜索):`grep -i "error" /var/log/syslog` - sed(流编辑器):`sed &#39;s/foo/bar/g&#39; file.txt` - awk(报表生成器):`awk &#39;{print $1}&#39; access.log` 三、系统管理阶段(4-6周) 1. 软件包管理实践 ```bash # Ubuntu示例 sudo apt update sudo apt install nginx apt-cache search python3 # 软件搜索 sudo apt remove --purge nginx ``` 2. 进程监控实战 ```bash top -d 1 # 动态监控 ps aux | grep nginx # 精确查找 kill -9 PID # 强制终止进程 systemctl status sshd # 服务管理 ``` 四、网络与脚本阶段(4-6周) 1. 网络配置案例 ```bash ifconfig eth0 192.168.1.10 netmask 255.255.255.0 route add default gw 192.168.1.1 nslookup www.baidu.com # DNS解析测试 ``` 2. Shell脚本开发示例 ```bash #!/bin/bash # 自动备份脚本 BACKUP_DIR="/var/backups" DATE=$(date +%Y%m%d) tar -czf ${BACKUP_DIR}/backup-${DATE}.tar.gz /home/user/documents find ${BACKUP_DIR} -name "*.tar.gz" -mtime +7 -exec rm {} \; ``` 五、进阶提升方向 1. 服务部署实战 - Web服务器:Nginx/Apache配置 - 数据库:MySQL/MongoDB安装调试 - 容器化:Docker基础操作 2. 安全加固要点 - SSH密钥登录配置 - fail2ban防暴力破解 - 定期漏洞扫描(lynis工具) 学习资源推荐: 1. 在线实验:https://www.linuxjourney.com/(交互式学习) 2. 经典书籍:《Linux命令行与shell脚本编程大全》 3. 视频教程:B站"韩顺平Linux"系列(适合中文学习者) 4. 社区支持:Linux中国(https://linux.cn/) 实践建议: 1. 每日命令挑战:在https://cmdchallenge.com/完成5个练习 2. 搭建个人博客:LAMP环境 + WordPress 3. 参与开源项目:从GitHub的good-first-issue起步 学习提示: - 遇到报错时先看错误提示(80%的问题可通过错误信息解决) - 善用`man`命令查看手册(例:`man ls`) - 建立自己的命令备忘录(推荐使用joplin等笔记工具) 进阶认证路径(可选): 1. Linux Foundation认证工程师(LFCS) 2. Red Hat认证工程师(RHCE) 3. LPI认证(三级体系) 建议每天投入1-2小时系统学习,配合实际环境操作,3个月后可达到初级运维水平。重点培养通过命令行解决问题的能力,这是Linux学习的核心价值所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值