Linux-文本编辑命令sed

一、文本编辑工具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)
# 打印test.txt文本中第1-3行的内容
sed -n '1,3p' test.txt
# 回车后,结果直接输出在屏幕中

# 打印发生替换的行
sed -n 's/abc/mine/p' test.txt

sed -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.txt

sed -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'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值