命令汇总
指令 |
含义 |
a |
在当前行后面加入一行文本 |
b lable |
跳转分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末 |
c |
用新的文本改变本行的文本 |
d |
从模式空间(Pattern space)位置删除行 |
D |
删除模板块的第一行 |
i |
在当前行上面插入文本 |
h |
拷贝模式空间的内容到保持空间(hold space),替换之前的内容 |
H |
将模式空间的内容追加到保持空间,追加为\n |
g |
获取保持空间中的内容,并覆盖当前模式空间的内容 |
G |
后去保持空间中的内容,将内容追加到模式空间之后 |
l |
列出不能打印的字符 |
n |
读取下一行的内容,替换当前行 |
N |
读取下一行的内容,追加到当前行之后,即 \n 下一行的内容 |
p |
打印模式空间的内容 |
P(大写) |
打印模式空间的第一行 |
q |
退出sed |
r file |
从指定的文件中读取内容 |
s |
s/re/string 用string替换正则表达式re,s/re/string/g 表示替换所有处 |
t lable |
如果之前的模式满足条件,则执行t 并跳转到指定的标签出,如果t 没有
标签则跳转到表达式最后(也就是结束什么都不做)
|
T lable |
和t 指令相反,当前面的模式没有满足条件时,才进行跳转 |
w file |
将模式空间中的内容append到指定的文件后 |
W file |
将模式空间中的第一行append到指定的文件后 |
x |
互换模式空间和保持空间的内容 |
y |
类似tr命令,y/old/new/ 将old替换成new,这里是按字母匹配的,所以
old和new的长度必须一样
|
选项
选项 |
含义 |
-e |
进行多项编辑,即对输入行应用多条sed命令时使用 |
-n |
取消默认的输出 |
-f |
指定sed脚本的文件名(sed的表达式放在一个文件中) |
-r |
使用扩展正则表达式 |
元字符集
元字符 |
含义 |
^ |
锚定行的开始如:/^sed/匹配所有以sed开头的行 |
$ |
锚定行的结束 如:/sed$/匹配所有以sed结尾的行 |
. |
匹配任意一个字符 |
[] |
匹配指定范围内的字符 |
\(..\) |
保存匹配的字符,如s/\(love\)able/\1rs,\1可以引用第一个圆括号的内容 |
& |
用来当做被匹配的变量 |
\< |
锚定单词的开始,如:/\<love/匹配包含以love开头的单词的行 |
\> |
锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行 |
x\{m\} |
重复字符x,m次,如:/0\{5\}/匹配包含5个o的行 |
x\{m,\} |
重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行 |
x\{m,n\} |
重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行 |
指令详解
a指令
#在所有行后增加...
seq 10 | sed 'a ......'
#在2,3行之后增加 ??
seq 10 | sed '2,3 a ??'
b指令
#如果是匹配 3则只在最后增加 !!!,其他行在尾后增加@@@和 !!!
#b标签是强制跳转,不像t标签满足条件后才跳转,b是任何情况下都跳转
seq 10 | sed '/3/b lable; s/$/ @@@/; :lable s/$/ !!!/'
#结果
1 @@@ !!!
2 @@@ !!!
3 !!!
4 @@@ !!!
5 @@@ !!!
6 @@@ !!!
7 @@@ !!!
8 @@@ !!!
9 @@@ !!!
10 @@@ !!!
i指令
#在第三行之前增加 ???
seq 10 | sed '3 i ???'
#在第一到第五行之前增加hehe
seq 10 | sed '1,5 i hehe'
#如果是8开头的,则在这行之前增加hehe
seq 10 | sed '/^8/ i hehe'
h,H,g,G指令
seq 3 | sed 'H;g'
#结果为
1
1
2
1
2
3
seq 3 | sed 'h;G'
#结果
1
1
2
2
3
3
seq 3 | sed -n '1!G; h; $p'
#结果
3
2
1
seq 3 | sed 'H;g' 执行步骤:
操作 |
模式空间 |
保持空间 |
H |
1 |
\n1 |
g |
\n1 |
\n1 |
H |
2 |
\n1\n2 |
g |
\n1\n2 |
\n1\n2 |
H |
3 |
\n1\n2\n3 |
g |
\n1\n2\n3 |
\n1\n2\n3 |
seq 3 | sed 'h;G' 执行步骤
操作 |
模式空间 |
保持空间 |
h |
1 |
1 |
G |
1\n1 |
1 |
h |
2 |
2 |
G |
2\n2 |
2 |
h |
3 |
3 |
G |
3\n3 |
3 |
seq 3 | sed -n '1!G; h; $p' 执行结果
操作 |
模式空间 |
保持空间 |
1!G |
1 |
|
h |
1 |
1 |
$p |
--- |
--- |
1!G |
2\n1 |
1 |
h |
2\n1 |
2\n1 |
$p |
--- |
--- |
1!G |
3\n2\n1 |
2\n1 |
h |
3\n2\n1 |
3\n2\n1 |
$p |
3\n2\n1 |
|
l 指令
#显示不可打印字符
cat /etc/man.config | head | sed -n 'l'
n和N指令
#打印偶数行,n将下一行的内容读取替换当前行
seq 11 | sed -n 'n; p'
#结果
2
4
6
8
10
#打印基数行,N将下一行的内容读取然后append到当前行后面,P(大写)打印模式空间中第一行
seq 12 | sed -n '$!N; P'
1
3
5
7
9
11
p和P指令
seq 11 | sed -n 'N; P'
seq 12 | sed -n '$!N; P'
#从这两段打印偶数,基数的代码中可以看出p和P(大写)的区别
#p是打印模式空间中所有的内容,而P只打印第一行
q指令
#当匹配 3这行时,退出sed
seq 10 | sed '/3/q;'
r指令
#当匹配10这一行时,读取xx.log文件
seq 10 | sed '/10/r xx.log'
#结果
1
2
3
4
5
6
7
8
9
10
11111
22222
33333333333
4444444444444
ffffff
s指令
#匹配这行第四个和第五个aaa,将其替换为AAA,这里使用了多个匹配
#两个匹配之间用分号分隔, 注意两个匹配式是一样的,因为第一次匹配完之后
#内容就变了
echo "aaa bbb aaa aaa ccc ddd aaa aaa aaa " | sed 's/aaa/AAA/4; s/aaa/AAA/4;'
#匹配这行所有出现的aaa
echo "aaa bbb aaa aaa ccc ddd aaa aaa aaa " | sed 's/aaa/AAA/g'
#匹配第一到第二行,将所有的1替换为!
sed '1,2s/1/!/g' xx.log
#匹配第三行到最后一行,将所有的1替换为!
sed '3,$s/1/!/g' xx.log
t和T指令
#将第三行替换为three,其他行替换为ok
seq 5 | sed 's/3/three/; t lable; s/[0-9]/ok!/; :lable'
#T标签和t相反,当前面的表达式没有匹配时才跳转到lable标签
w指令
#匹配3,将结果写入到xx.log中
seq 5 | sed -n '/3/w xx.log'
x指令
#交换模式空间和保持空间的内容
#第三行的模式空间和保持空间交换后,模式空间为空
#第四行和保持空间交换,此时保持空间内容为3,所以最终模式空间内容变为3
seq 5 | sed '3,4 x;'
#结果
1
2
3
5
y指令
#匹配bbb,替换为BBB
#注意y指令是按字符替换的,所以匹配前的字符和匹配后的字符长度应该相等
echo "aaa bbb ccc" | sed 'y/bbb/BBBB/'
打印当前行号
#当匹配f时,用= 指令打印当前行号
for i in {a..j}; do echo $i; done | sed -n '/f/='
& 符号
# & 符号表示被匹配的变量
for i in {a..j}; do echo $i; done | sed 's/f/---> & <---/;'
{} 匹配
#匹配a,至少3-5次
echo "xxx aaaaaa fff " | sed 's/a\{3,5\}/!!!/'
#可以用扩展正则表达式实现
echo "xxx aaaaaa fff " | sed -r 's/a{3,5}/!!!/'
\< 和 \>
#匹配k开头的单词,和k结尾的单词
echo "aaa bbb kkk ccc ddd" | sed 's/\<k/***/; s/k\>/###/'
圆括号匹配
#假设file中都是数字,匹配前两个数字,将十位数,变成个位数+一个小数点和数字
sed 's/\([0-9]\)\([0-9]\)/\1.\2/' file.txt
#上面的() 需要转义,可以用扩展正则表达式来完成同样的功能
sed -r 's/([0-9])([0-9])/\1.\2/' file.txt
多个匹配和子匹配
#匹配多个,也可以用-e 来实现
echo "xxx aaaaaa fff " | sed -r 's/a/A/; s/x/X/; s/ /--/'
#结果
Xxx--Aaaaaa fff
#子匹配,如果匹配3,则执行子匹配, 读取下一行append到模式空间
#如果又匹配4,则再执行子匹配打印当前模式空间内容; 如果匹配5则执行子匹配
#删除当前模式空间内容
seq 5 | sed -n '/3/{N; /4/{p;}; /5/{d}; }'
#结果
3
4
#删除匹配的结果 /[匹配的表达式]/
seq 10 | sed '/3/d'
一些实际的例子
交换奇偶行
seq 10 | sed -n 'x;n;p;x;p'
执行步骤
操作 |
模式空间 |
保持空间 |
x |
null |
1 |
n |
2 |
1 |
p |
2 |
1 |
x |
1 |
2 |
p |
1 |
2 |
另一种方式
seq 10 | sed -n 'h;$!{n;G};p'
操作步骤
操作 |
模式空间 |
保持空间 |
h |
1 |
1 |
$!{n |
2 |
1 |
G} |
2\n1 |
1 |
p |
2\n1 |
1 |
将所有行合并成一行
seq 10 | sed -n '1{h};1!{H};${g;;s/\n/ /g;p}'
操作步骤
操作 |
模式空间 |
保持空间 |
1{h} |
1 |
1 |
1!{H} |
1 |
1 |
${....} |
1 |
1 |
1{h} |
1 |
1 |
1!{H} |
2 |
1\n2 |
${...} |
2 |
1\n2 |
.... |
..... |
.... |
${....} |
1\n2\n3... |
1\n2\n3... |
另一种方式
seq 10 | sed -n 'h;:lable n;H;$!{b lable};x;s/\n/ /g;p'
首先执行h,将模式空间内容覆盖到保持空间
之后执行lable标签,n 将下一行的内容覆盖到当前行,然后将模式空间内容append到保持空间
如果不是最后一行,则执行跳转标签继续重复n;H; 执行
到最后一行执行x指令,此时模式空间内容就是1\n2\n3\n4\n..., 再执行s执行替换\n 之后打印
参考
sed(linux指令)
sed的保持空间和模式空间
关于sed的模式空间和保持空间的例子
sed之lable使用详解
sed简明教程
sed系列文件
sed英文手册
相关推荐
### 总结 `sedsed`工具在`sed`基础上增强了删除操作的便利性,简化了文本处理流程,尤其适合于需要快速处理文本的场景。熟悉并掌握`sedsed`的用法,能提升Linux环境下的文本处理效率,是Linux系统管理员和开发者的...
sed命令是UNIX和类UNIX系统中常用的流编辑器,它能够执行基本的文本转换功能。sed可以看做是非交互式的文本编辑器,因为它不会改变文件内容,而是将编辑后的文本输出到标准输出。在Linux系统中,sed命令通常用于脚本...
总结而言,grep、sed和awk这三种工具各有所长,能应对不同复杂度的文本处理需求。grep适用于简单的搜索和计数任务,sed则更加强大,可以进行文本替换和复杂编辑,而awk则类似于一种简化的编程语言,其在文本处理上...
#### 四、总结 sed作为一种强大的文本编辑工具,在处理文本文件方面具有广泛的应用场景。无论是简单的文本替换还是复杂的文本处理逻辑,sed都能够胜任。通过了解sed的基本命令和功能,以及如何编写sed脚本来组合...
总结,"sed1520_51单片机_SED1520_badlyzgv_源码"这一主题涵盖了51单片机与LCD控制器的交互,特别是使用SED1520的LCD显示方案。通过研究badlyzgv的源码,开发者可以深入理解LCD显示的原理和实践,进一步提升其在...
五、总结 编写SED1520的C语言驱动程序,需要理解其内部工作原理,掌握基本的LCD控制命令,并熟悉目标开发平台的I/O操作。通过Keil这样的专业开发工具,可以方便地进行程序设计、调试,从而实现对LCD的精确控制。在...
#### 总结 `sed` 是一个极其灵活且强大的文本处理工具,能够高效地处理来自文件或管道的标准文本。通过了解并熟练掌握其提供的参数,用户可以在日常工作中实现各种复杂的文本处理任务。无论是简单的替换操作还是复杂...
总结,sed1520驱动LCD程序涉及硬件接口设计、C语言编程、LCD控制器操作等多个方面。理解和编写这样的驱动程序,既需要扎实的理论基础,又需要实践经验。只有掌握了这些知识,才能在实际项目中灵活运用,实现高效的...
### 总结 SED作为一种功能强大的文本处理工具,在日常的文件处理任务中有着广泛的应用。通过上述的解析和示例,我们不仅可以了解到SED的基本用法,还能掌握一些实用的技巧,如如何使用脚本来批量处理文件、如何通过...
#### 五、总结 通过上述内容,我们可以看到 `sed` 命令的强大之处在于其灵活多变的命令集和高效的文本处理能力。无论是简单的文本替换还是复杂的文本分析任务,`sed` 都能提供有效的解决方案。掌握 `sed` 命令不仅...
#### 四、总结 - `sed`和`awk`都是非常有用的文本处理工具,它们各自拥有独特的优势: - `sed`擅长于执行简单而高效的文本编辑任务。 - `awk`则更擅长于数据分析和复杂的文本处理任务。 - 在实际应用中,可以根据...
### sed和awk简明手册知识点总结 #### 一、sed简介 - **基本概念**: - sed(stream editor)是一种非交互式的面向字符流的编辑器,它主要用于文本文件的处理,尤其适用于批量替换、删除、添加等操作。 - sed的...
**总结** "awd和sed思维导图"涵盖了AWD和sed两个主题,前者是Windows网络管理的核心,后者是Linux文本处理的利器。通过学习和使用这些思维导图,用户可以更有效地理解和应用这两个工具,提升其在IT领域的技能和效率...
在IT行业中,文本处理是日常工作中不可或缺的一部分,而awk、sed和grep是Linux/Unix环境中强大的文本处理工具。这三个工具各自具有独特的功能,但又常常相互配合,为数据过滤、格式化和查找提供了强大支持。下面我们...
本文将对sed和gawk的使用进行入门到进阶的知识体系总结整理。 首先,我们来看sed的使用要点: 1. sed的基本格式是sed [options] 'command' file。其中,options是可选的选项,比如-n表示不输出模式空间内容,-e...
#### 四、总结 通过以上分析可以看出,`sed`命令具有极强的功能性和灵活性,在文本处理方面有着广泛的应用。掌握`sed`的使用方法不仅能够提高工作效率,还能帮助解决各种文本处理难题。希望本篇内容能够为你理解和...
总结 通过对以上命令的对比,我们可以看到`sed`和`awk`在处理文本时各有优势。`sed`适合于简单的文本替换、删除等操作;而`awk`则更适合于处理复杂的文本分析任务,如条件判断、格式化输出等。选择哪种工具取决于...