> 文章列表 > Linux三剑客——sed文本编辑命令

Linux三剑客——sed文本编辑命令

Linux三剑客——sed文本编辑命令

sed命令

sed [选项] [sed内置命令字符] [输入文件]

注意:如果不加-i参数,那么所有的内容仅作用于内存,而非磁盘,
也就是不加-i不会保存文件的意思,sed中输出的内容是正确的,但
是使用cat输出文件就会发现文件未改变。
不加-i直接结束会有默认输出,输出内容是sed命令执行结束之后的
结果,加上-i则没有输出,直接保存文件。
在这篇文章中没有十分细致的区分这些内容,请记得区分。

👾 选项

参数 说明 备注
-e 以选项中指定的script来处理输入的文本文件 <script>或--expression=<script>
-i 保存文件,将修改的内容写入磁盘 不加-i参数的话修改的是内存中的数据
-f 以选项中指定的script文件来处理输入的文本文件 <script文件>或--file=<script文件>
-h 或–help 显示帮助
-n 或–quiet或–silent 仅显示script处理后的结果
-V 或–version 显示版本信息

👾 动作说明

注意-i-a都是向文本中添加内容,但是不同的是-i是在前面追加,-a是在后面追加,如sed '2a Hello World'就是在第二行后面插入一句Hello World,Hello World在第三行,但是如果将a改成i,就变成了在第二行前面插入一行Hello World,Hello World在第二行,原本的第二行变为第三行。

动作 说明 备注
i 插入(在前面插入), i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行); insert
a 追加(在后面追加), a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~ append
c 取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d 删除,因为是删除啊,所以 d 后面通常不接任何东东; delete
p 打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~ print
s/被替换内容(旧)/替换内容(新)/g 取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g 就是啦! 还可以写成s###gs@@@g符号没关系,g代表全局

👾 匹配范围

范围 解释
空地址 全文处理
单地址 指定文件某一行
/pattern/ 被模式匹配到的每一行
范围区间 10,20 十到二十行,10,+5第十行向下五行,/pattern1/,/pattern2/
步长 1~2,表示1、3、5、7、9行,2~2两个步长,表示2、4、6、8、10、偶数行

🌰 举些栗子

👾 输出内容 | p

sed '2,3p' luffycity.txt -n #「不默认输出」 sed,第二行与第三行,`p`表示print输出,-n不显示默认输出,只显示操作的内容

👾 查找内容 | /x/p

sed '/linux/p' luffycity.txt -n # 「不默认输出」查找有`linux`的行

👾 删除内容 | d

sed '/linux/d' luffycity.txt # 删除有`linux`的行
> sed '/linux/d' luffycity.txt -i
> cat luffycity.txt 
# My name is chaoge.
# I like play computer game.
# My qq is 12345678.
# My website is http://pythonav.cn.
sed '3,$d' luffycity.txt -i # 「保存文件」删除第三行到结尾行

👾 插入/追加内容 | a

sed '2a I love u' jimx.txt # 在第二行末尾插入一行
sed '4i I love m' jimx.txt # 在第四行前面一行插入一行
sed "2a I like Girl.\\nPretty Girl is better." jimx.txt # 用换行符插入两行
> sed 'a ----------------' jimx.txt
# My name is jim.
# ----------------
# I learn linux.
# ----------------
# I like Girl.
# ----------------
# Pretty Girl is better.
# ----------------
# My favourite system is Kali
# ----------------
# My qq is 12345678.
# ----------------
# My CSDN is https://blog.csdn.net/Hsk_03.
# ----------------

如果要了解正则表达式可以查看:「CSDN」| Linux三剑客——grep命令与正则表达式

📜 参考内容

「Bilibili」Linux三剑客超全超详情教程(grep、sed、awk入门到精通有这一套足够了)