shell 三剑客-sed

sed 是Linux 系统一款非常强大的非交互式的文本编辑器,可以对文本进行增删改查操作,正则匹配文本内容。适合大文件编辑
sed 语法
sed +选项 ‘指令’ 文件
sed +选项 -f 包含sed指令的文件 文件

常用参数

-i:直接修改文件内容,而不是输出到终端。
 
-n:安静模式,屏蔽默认输出(全部文本),只有经过sed特殊处理的那一行才会被列出来。
-e :指定sed动作,可以由多个-e指定多个动作。
 
-r:启用扩展的正则表达式,若与其他选项一起使用,应作为首个选项
 
-f :直接将sed的动作写在一个文件内,-f filename则可以运行filename 内的sed动作;
 
--help:显示帮助。
 
--version:显示版本。
 
-{}:可组合多个命令,以分号分隔

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何内容;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :替换,通常这个s的动作可以搭配正规表示法!例如 1,20s/old/new/g。

准备数据

mkdir sed
cd sed
vi 01.txt
1
2
3
hi 
你好

输出所有行

#输出所有行,等同于cat 01.txt
sed '1p' 01.txt
sed -n 'p' 01.txt

在这里插入图片描述

输出指定行

#输出第1行
sed -n '1p' 01.txt
#输出第4行
sed -n '4p' 01.txt
#输出最后一行
sed -n '$p' 01.txt
#输出第5行到最后一行
sed -n '5,$p' 01.txt
#输出第5行及其后的2行内容,共3行
sed -n '5,+2p' 01.txt
#输出包含A的行
sed -n '/A/p' 01.txt
#输出包含A的行忽略大小写 I
sed -n '/A/Ip' 01.txt
#输出以a开头的行或者以r(R)开头的行
sed -n '/^a/p;/^r/Ip' 01.txt
#输出以dsf结尾的行
sed -n '/dsf$/p' 01.txt
#输出偶数行
sed -n 'n;p' a.txt
#输出奇数行
sed -n 'p;n' 01.txt

输出文档行数

sed -n '$=' 01.txt

添加 实例都是不修改源文件 如果需要修改源文件 加上-i

#从第2行开始到第4行每一行都增加一条
sed '2,4a felicia 你好 "adf"' 01.txt
sed -e 2,4a\你好! 01.txt

#不写2,4 每一行都增加一条
sed 'a felicia 你好 "adf"' 01.txt
sed -e a\你好! 01.txt
#第2行后加一行
sed '2a felicia 你好 "adf"' 01.txt
sed -e 2a\felicia,你好 01.txt
#第2行前加一行
sed '2i felicia \n你好' 01.txt
sed -e 2i\felicia,你好 01.txt

#在第1行插入02.txt 文件内容
 sed '1r 02.txt' 01.txt

删除 实例都是不修改源文件 如果需要修改源文件 加上-i

#删除所有行
sed 'd' 01.txt
#删除第1行
sed '1d' 01.txt
#删除最后1行
 sed '$d' 01.txt
 #删除所有空行
sed '/^$/d' 01.txt
#删除第2行到第5行
sed '2,5d' 01.txt
#删除包含你好或者abc 的行
sed  '/你好\|ABC/d' 01.txt
#删除包含你好或者abc 的行
sed '/你好/d;/abc/d' 01.txt
#删除包含你好并且abc的行
sed '/你好/{/abc/d}' 01.txt
#删除不以abc开头的行 !表示取反
sed  '/^abc/!d' 01.txt

取代 实例都是不修改源文件 如果需要修改源文件 加上-i

#取代第三行的内容
sed '3c 你好呀 \n好久不见' 01.txt
sed -e 3c\你好 01.txt
#取代第1行至第3行的内容
sed '1,3c aaaaa' 01.txt
#取代第1行及后面3行的内容 共4行
sed '1,+3c aaaaa' 01.txt

在这里插入图片描述

#每一行第1个你好 替换 aaa
sed 's/你好/aaa/' 01.txt
#第1行到第10行 第1个你好 替换 aaaa
sed  '1,10s/你好/aaaa/' 01.txt
#第1行到第10行 第2个你好 替换 aaaa
sed  '1,10s/你好/aaaa/2' 01.txt
#第1行到第10行 所有 你好 替换 aaaa
sed  '1,10s/你好/aaaa/g' 01.txt
#将所有的你好 替换 你好s & 表示查找串
sed 's/你好/&s/g' 01.txt
#将第1行至第3行 添加#
sed '1,3s/^/#/' 01.txt
#将所有 你好 或者ABC 或者 abc 替换成空字符 \|表示或者
sed 's/你好\|ABC\|abc//g' 01.txt

删除文件中每行的第二个、最后一个字符

#.匹配任意字符
sed 's/.//2;s/.$//' 01.txt

将文件中每行分割为 1:1个字符:2:1个字符 3:2个字符 4:剩下字符 然后按照 4-3-2-1 重新排序

#.匹配任意字符
sed -r 's/^(.)(.)(..)(.*)/\4\3\2\1/' 01.txt

将文件中每行分割为 1:1个字符:2:1个字符 3:2个字符 4:剩下字符 然后按照 4-3-2-1 重新排序

sed -r 's/(.)(.*)(.)/\3\2\1/' 01.txt

每个大写字母用()括起来

sed 's/[A-Z]/(&)/g' 01.txt

删除所有数字、行首空格

sed -r 's/[0-9]//g;s/^( )+//' 01.txt

查找roo开头的行

 sed -n '/^root/p' /etc/passwd
 #不区分大小写
 sed -n '/root/I p' /etc/passwd
 #区分大小写
 sed -n '/root/p' /etc/passwd
 #查找包含/sbin/nologin 的行
 sed -n '\%/sbin/nologin% p' /etc/passwd

复制剪切
复制:
H:模式空间—[追加]—>保持空间
h:模式空间—[覆盖]—>保持空间

粘贴:
G:保持空间—[追加]—>模式空间
g:保持空间—[覆盖]—>模式空间

#把第1-3行复制到文件末尾
#可避免出现空行
 sed '1h;2,3H;$G' test.txt
 #此处有空行时因为第一次是在保持空间里追加,而保持空间默认有一个空行
 sed '1,3H;$G' test.txt
 #把第1-2行剪切到文件末尾
 sed '1h;2H;1,2d;$G' test.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值