sed命令

1、sed主要以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作
sed命令格式:
sed [optins] ‘commmand’ file
在这里插入图片描述
如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
2、常用命令
a\ 在当前行下面插入文本;
i\ 在当前行上面插入文本;(直接修改,原文内容 也会更改)
c\ 把选定的行改为新的文本;(所在一行直接替换)
d 删除,删除选择的行
e多点编辑;命令的执行顺序对结果有影响。如果两
个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果
命令
p 可以控制只输出你指定的内容。通常使用 p 时,还需要使用-n 选项来
屏蔽 sed 的默认输出,否则当执行命令 p 时,每行记录会输出两次。

D 删除模板块的第一行;
s 替换指定字符;
h 拷贝模板块的内容到内存中的缓冲区;
H 追加模板块的内容到内存中的缓冲区;
g 获得内存缓冲区的内容,并替代当前模板块中的文本;
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面;
l 列表不能打印字符的清单;
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令;
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码;
p 打印模板块的行。 P(大写) 打印模板块的第一行;
q 退出Sed;
b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾;
r file 从file中读行;
t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本
的末尾;
T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚
本的末尾;
w file 写并追加模板块到file末尾;
W file 写并追加模板块的第一行到file末尾;
! 表示后面的命令对所有没有被选定的行发生作用;
= 打印当前行号;把注释扩展到下一个换行符以前·
3、sed替换标记
在这里插入图片描述
4、sed元字符集
在这里插入图片描述

5、sed匹配时加“/p” 表示匹配打印,不加“/” ,只有p
打印的行出现,而其他行也会出现
-n选项和p命令一起使用表示只打印那些发生替换的行
s与g搭配,表示会全局替换
默认情况下,sed 至会替换每行中第一次出现的原始字符串。
/1 ,/2, /3 需要从n处匹配开始替换

1)#正则表达式 \w+ 匹配每一个单词,使用 [&] 替换它,& 对应于之前所匹配到的单词
echo “this is a test line” | sed ‘s/\w+/[&]/g’
在这里插入图片描述
& 保存搜索字符用来替换其他字符
+ 表示匹配一到多次
2)字串匹配标记\1
#命令中 digit 7,被替换成了 7。样式匹配到的子串是 7,(…) 用于匹配子串,对于匹配到的第一个子串就标记为 \1,依此类推匹配到的第二个结果就是 \2
在这里插入图片描述
在这里插入图片描述
注:如果匹配\2 \1 则[0-9]需要写两次
测试
在这里插入图片描述

在这里插入图片描述
3)选定行的范围 “,”
echo “test” >> /etc/passwd
sed -n ‘5,/^test/p’ /etc/passwd
在这里插入图片描述
4) a (追加) 在当前行下面插入文本;
sed ‘/^test/a\ this is a test line ’ /etc/passwd
在这里插入图片描述
在第二行插入“this is a test line”
在这里插入图片描述

5) i\ 在当前行上面插入文本;
sed -i ‘6i\this is a test line’ /etc/passwd
在这里插入图片描述
6)c\ 把选定的行改为新的文本;(所在一行直接替换)
sed ‘/Jose/c JOSE HAS RETIRED’ /Week41.config
在这里插入图片描述
在这里插入图片描述
7)d 删除,删除选择的行
touch bb
vi bb
在这里插入图片描述

8)e多点编辑, 允许在同一行执行多条命令
在这里插入图片描述
-e 的使用方法:
sed [ options ] –e {sed-command-1} –e {sed-command-2} {input-file}
下面的例子演示了-e 的使用方法,它打印/etc/passwd 中以 root 和 alice开头的行:
sed –n –e ‘/^root/ p’ –e ‘/^nobody/ p’ /etc/passwd
在这里插入图片描述
如果使用-e 执行多个命令,也可以使用反斜杠\把它们分割到多行执行:
Sed –n
-e ‘/^root/ p’
-e ‘/^alice/ p’
/etc/passwd
在这里插入图片描述
也可以使用{ }将多个命令分组执行:
{}的使用方法:
sed [options] ‘{
sed-command-1
sed-command-2
}’ input-file
下面的例子演示了{}的使用方法,打印/etc/passwd 中以 root 和 alice开头的行:
sed –n ‘{
/^root/ p
/^alice/ p
}’ /etc/passwd
在这里插入图片描述
9) 从文件读入:r
创建file文件 内容为在这里插入图片描述
sed ‘/test /r file ’ bb
此时,file中的内容会从test匹配的位置开始显示
在这里插入图片描述
10)写入文件:w
命令 w 可以把当前模式空间的内容保存到文件中。默认情况下模式空间的内容每次都会打印到标准输出,如果要把输出保存到文件同时不显示到屏幕上,还需要使用-n 选项
sed -n’ /test/w file’ bb
在这里插入图片描述
此时,file中的内容被覆盖
11)p 打印
sed匹配时加“/p” 表示匹配打印,不加“/” ,只有p 打印的行出现,而其他行也会出现
(通常使用 p 时,还需要使用-n 选项来屏蔽 sed 的默认输出,否则当执行命令 p 时,每行记录会输出两次。)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
练习:
拷贝Week41.config文件并完成以下练习

  1. 把Jon的名字改为Jonathan
  2. 在这里插入图片描述在这里插入图片描述
  3. 删除头3行
    在这里插入图片描述
  4. 打印第5~10行
    在这里插入图片描述
  5. 删除含有Lane的所有行

在这里插入图片描述
6. 打印所有生日在十一月或十二月的行
在这里插入图片描述
7. 在以Kare开头的行末尾加上3颗星
在这里插入图片描述
8. 将所有包含Jose的行都替换为JOSE HAS RETIRED
在这里插入图片描述
在这里插入图片描述
9. 把Popeye的生日改为11/14/46,假定您不知道Popeye的生日,设法用正则式查找出来
sed -n ‘/Popeye/{ sx[0-9][0-9]/[0-9][0-9]/[0-9][0-9]x11/14/46x; p }’ Week41.config
#s命令在进行替换时,允许用户指定定界符(分隔符),这里指定了x为定界符。
在这里插入图片描述
10. 删除所有空行
在这里插入图片描述
练习题
11. 删除文件每行的第一个字符
1) sed ‘s/(.)//1’ /etc/passwd
在这里插入图片描述
2)sed ‘s/^(.)//g’ /etc/passwd
在这里插入图片描述
3)sed 's/(.)(. .
: ) (. .* : )( . . * : )(. * : )(. . * : )(…)/\2\1\3\4\5\6\7/’/etc/passwd
在这里插入图片描述
12. 删除文件每行的第二个字符
在这里插入图片描述
13. 删除文件每行的最后一个字符
在这里插入图片描述
14. 删除文件每行的倒数第二个字符
在这里插入图片描述
15. 删除文件每行的第二个单词 sed 's/^( . .
: )( . . * : )(. .* : )(. .* : )(. .* : )(. .* : )(. . * )/\1\3\4\5\6\7/’ /etc/passwd
在这里插入图片描述
16. 删除文件每行的倒数第二个单词sed ‘s/^(. .* : )(. .* : )(. .* : )(. .* : )(. .* : )(. .* : )(. . * )/\1\2\3\4\5\7/’ /etc/passwd
在这里插入图片描述
17. 删除文件每行的最后一个单词sed ‘s/(. .* : )(. .* : )(. .* : )(. .* : )(. * : )(. .* : )(. .* )/\1\2\3\4\5\6/’ /etc/passwd
在这里插入图片描述
18. 交换每行的第一个字符和第二个字符sed ‘s/(.)(.)(.\ )/\2\1\3/’ /etc/passwd
在这里插入图片描述
19. 交换每行的第一个字符和第二个单词 在这里插入图片描述
20. 交换每行的第一个单词和最后一个单词sed ‘s/^(. .* : )(. . * : )(. . * : )(. . * : )(.* : )(. . * : )(. . * )/\7\2\3\4\5\6\1/’ /etc/passwd
在这里插入图片描述

  1. 删除一个文件中所有的数字sed ‘s/[0-9]//g’ /etc/passwd
    在这里插入图片描述
  2. 删除每行开头的所有空格sed ‘s/^ //g’ /etc/passwd
    在这里插入图片描述
  3. 用制表符替换文件中出现的所有空格
    1)sed -r ‘s/ +/\t/g’ /etc/passwd
    在这里插入图片描述
    2)sed ‘s/ /\t/g’ /etc/passwd
    在这里插入图片描述
    3)sed 's / +/\t/g ’ /etc/passwd
    在这里插入图片描述
  4. 把所有大写字母用括号()括起来sed ‘s/([A-Z])/(&)/g’ /etc/passwd
    在这里插入图片描述
  5. 打印每行3次
    sed ‘p;p’ /etc/passwd
  6. 隔行删除
    sed -n ‘1·2 p’ /etc/passwd
    在这里插入图片描述
  7. 把文件从第22行到第33行复制到第56行后面
    sed ‘22h;23,33H;56G’ /etc/passwd
  8. 把文件从第22行到第33行移动到第56行后面
    sed ‘22{h;d};23,33{H;d};56g’ /etc/passwd
  9. 只显示每行的第一个单词sed ‘s/(. .* )( . .* : )(. .* : )(. .* : )(.* : )(. .* : )(. .* )/\1/’ /etc/passwd
    在这里插入图片描述
  10. 打印每行的第一个单词和第三个单词sed ‘s/(. .* : )(. .* : )(. .* : )( . .* : )(.* : )(. .* : )(. .* )/\1\3/’ /etc/passwd
    在这里插入图片描述
  11. 将格式为 mm/yy/dd 的日期格式换成 mm;yy;dd
    date ‘+%m/%y/%d’ |sed 's#/#; #g’sed
  • 13
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值