一、文本编辑工具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'