Linux-文本编辑命令sed

news/2024/11/9 9:49:06/

一、文本编辑工具sed

Linux之sed命令详解 - zakun - 博客园 (cnblogs.com)

sed 是一个流编辑器,将文件或标准输入的内容作为编辑的对象,对其按照需求进行修改

pattern space 模式空间,是一个缓冲区,sed从输入流中一行一行取出内容放在这个缓冲区中,按照script(脚本)进行处理。


注意:sed 所做的修改并不会直接改变文件的内容(如果是用管道符接收的命令的输出,则连文件都没有),而是把修改结果只显示到屏幕上,除非使用"-i"选项才会直接修改文件。


1、sed两种命令格式:

1)sed的命令格式:

sed [选项] ‘命令’ 文件(s)

2)sed的脚本格式:

sed [选项] -f scriptfile 文件(s)

2、选项

-n: 只打印模式匹配的行
-e: 直接在命令行模式上进行sed动作编辑,一条语句可执行多个sed命令
-i: 直接修改文件内容
-r: 支持扩展正则表达式
-f: 将sed的动作写在一个文件中,用 -f filename 执行filename内的sed动作
--help:显示帮助
--version: 显示版本信息

3、命令

 p 打印模板块的行;d 删除选择的行;s 替换指定字符串,搭配正则表达式使用;c 替换,c后面可以接字符串,替换n1,n2 之间的行a 新增,a后面可以接字符串,加在当前行的下一行i 插入,i后面可以接字符串,加在当前行的上一行

4、sed用户实例

文本 test.txt,文本内容——

#    #/bin/bash
ccc '2008-07-12' hahaha
url="http://roclinux.cn/index.php"
abc xyz abc xyz opq
abc xyz opq
Abc
ask_words="hello world"
name="Annica"
age=28
echo $name
echo $age
echo $ask_words

sed 【打印】指定行内容(-n 和 p)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vLXibTh6-1685019917044)(C:\Users\CST\AppData\Roaming\Typora\typora-user-images\image-20230525141206821.png)]

# 打印test.txt文本中第1-3行的内容
sed -n '1,3p' test.txt
# 回车后,结果直接输出在屏幕中# 打印发生替换的行
sed -n 's/abc/mine/p' test.txtsed -n 's/abc/mine/g'p test.txt
# 或者
sed -n 's/abc/mine/g p' test.txt

sed 打印包含字符串m的行到包含字符串n的行

sed -n '/abc/,/name/p' test.txt
sed -n '/abc/,/name$/p' test.txt

sed 【替换】文本中字符串(s,全面替换 g)

sed 's/aaa/change/' test.txt
sed 's/aaa/change/g' test.txt

sed 【编辑替换】文本中字符串(实际替换 -i 和s)

sed -i 's/aaa/change/' test.txt
sed -i 's/aaa/change/g' test.txt
# 如果指定匹配的第几处进行替换 /Ng
sed -i 's/aaa/change/2g' test.txt
# 指定第几行中替换匹配字符串
sed -i '1s/aaa/abc/g' test.txt
sed -i '2,3s/aaa/abc/g' test.txt
sed -i '1,$s/aaa/abc/g' test.txt

sed 删除指定行[如何使用 sed 命令删除文件中的行 - 知乎 (zhihu.com)]

sed '1d' test.txt
sed '1,$d' test.txt
sed '1d;5d;9d;$d' test.txt
# 删除指定范围之外的行  !d
sed '1,2!d' test.txt
# 删除空行
sed '/^$/d' test.txt
# 删除R字符开头的所有行
sed '/^R/d' test.txt
# 删除以指定字符m结尾的所有行
sed 'm$/d' test.txt# 删除指定行中包含某字符的行
sed '1,${/abc/d;}' test.txt
# 删除包含某字符的行
sed '{/abc/d;/opq/d;}' test.txt
# 删除包含数字的行
sed '/[0-9]/d' test.txt
# 删除 以数字开头的行
sed '/^[0-9]/d' test.txt

sed 【编辑删除】指定行(实际删除-i 和 d)

sed -i '1d' test.txt

sed 在匹配行前面插入 (i)

# -i 实际修改了内容
sed -i '2i newAdd' test.txt
sed -i '/^abc/i newAdd' test.txt # 在匹配行前插入字符串,且打印出插入的字符串,不加-i就不会实际修改sed -e '/^abc/i newAdd' -n -e '/&/p' test.txt 

sed 在匹配行后面追加(a)

# 第3行后添加一行,并将结果输出到标准输出,但并不会修改文件本身
sed -e 3a\newAdd test.txtsed -e '3a newAdd' test.txt

sed 在文件中每个大写字母添加括号

sed -r 's/([A-Z])/(\1)/g' test.txt
# 或者
sed -r 's/([A-Z])/(&)/g' test.txt

(175条消息) sed命令学习与练习–20个例子_sed练习_baba孩的博客-CSDN博客

组合表达式


补充

如果打印的内容想要显示行号的话

nl test.txt  |sed -n '2p'

http://www.ppmy.cn/news/85127.html

相关文章

【连续介质力学】张量场

张量场 张量场表示张量 T ( x ⃗ , t ) T(\vec x, t) T(x ,t)在空间 x ⃗ \vec x x 和时间 t t t中如何变化,将张量场视为可微函数 如果一个张量场不依赖于时间,则此张量场称为定常场,例如 T T ( x ⃗ ) T T(\vec x) TT(x );相…

Java如何配置环境变量

Java如何配置环境变量 0. 前言1. 下载Java2. 配置环境变量2.1新建 Java_Home2.2 编辑Path情况1情况2 3. 验证安装 0. 前言 本节记录如何配置Java环境变量,用自己重装过的系统实操 操作系统:Windows10 专业版 Java版本:jdk1.7.0_07 1. 下载…

【SA8295P 源码分析】03 - SA8295P QNX Host 上电开机流程分析

【SA8295P 源码分析】03 - SA8295P QNX Host上电开机流程分析 一、阶段1 固件开机自检 (SM BIST):APPS PBL加载XBL后触发 INT_RESET进行Warm Reset二、阶段2 固件开机自检 (SM BIST):加载TZ,初始Hypervisor,启动QNX Kernel,加载并启动各子系统系列文章汇总见:《【SA8295P…

Flink自定义函数之表值聚合函数(UDTAGG函数)

1.表值聚合函数概念 自定义表值聚合函数(UDTAGG)可以把一个表(一行或者多行,每行有一列或者多列)聚合成另一张表,结果中可以有多行多列。 理解:假设有一个饮料的表,这个表有 3 列&a…

百度API实现自动写诗

作者介绍 张琪,男,西安工程大学电子信息学院,2022级研究生 研究方向:机器视觉与人工智能 电子邮件:3126743452qq.com 王泽宇,男,西安工程大学电子信息学院,2022级研究生&#xff0…

IOC初始化 IOC启动阶段 (Spring容器的启动流程)

[toc](IOC初始化 IOC启动阶段 (Spring容器的启动流程)) IOC初始化 IOC启动阶段 (Spring容器的启动流程) Resource定位过程:这个过程是指定位BeanDefinition的资源,也就是配置文件(如xml)的位置,并将其封装成Resource对…

ROS学习——rviz打开bag文件

一、首先可以在这个网站中下载.bag文件用于学习。 二、显示.bag文件信息 在终端1中启动&#xff1a; roscore 在终端2中输入&#xff1a; rosbag info <bag_file_name> 这里要把<bag_file_name>换成你自己的bag文件名字&#xff0c;之后在终端就会显示出bag文件…

水下图像0

d_r_1_.jpg 一个拖着电线的水下六足机器人在海水中作业 A robot is exploring the reef on the sea floor A hexapod robot works next to reef at the bottom of the sea A rectangular deep-sea robot swims past a patch of reef An underwater robot is detecting coral …