linux sed 命令 实现对文件的增删改替换查 实验
? ? ? 1. 统一实验文本# 创建包含下面内容的文件,后面的操作都会使用这个文件 [[email?protected] ~]# cat person.txt 101,mike,CEO 102,jack,CTO 103,yy,CFO 104,feixue,CIO 105,tom,COO ?2. 增删改查2.1 增
? 2a 追加到第二行后面 [[email?protected] ~]# sed ‘2a 106,ben,CSO‘ person.txt 101,CTO 106,CSO 103,COO ? 2i 把内容 插入到第二行前面 [[email?protected] ~]# sed ‘2i 106,CEO 106,CSO 102,COO 2.1.2 多行增加n 换行符 不加n的话 都在一行显示 [[email?protected] ~]# sed ‘2a 106,CSOn107,peter,CCO‘ person.txt 101,CSO 107,CCO 103,COO 第二种方法: 后面加 接上输入文本内容 [[email?protected] ~]# sed ‘2a 106,CSO > 107,CCO‘ person.txt 101,CSO 107,COO ? 企业案例1:优化SSH配置(一键完成增加若干参数)在我们学习系统优化时,有一个优化点:更改ssh服务远程登录的配置。主要的操作是在ssh的配置文件加入下面5行文本 Port 52113 PermitRootLogin no PermitEmptyPasswords no UseDNS no GSSAPIAuthentication no 我们可以使用vi命令编辑这个文本,但这样就比较麻烦,现在想一条命令增加5行文本到第13行前? [[email?protected] ~]# sed ‘13i Port 52113nPermitRootLogin nonPermitEmptyPasswords nonUseDNS nonGSSAPIAuthentication no‘ /etc/ssh/sshd_config 2.2 删d 删除指定的行? 不指定行,就删除所有行,所以没有结果 [[email?protected] ~]# sed ‘d‘ person.txt ? 删除文本第二行 [[email?protected] ~]# sed ‘2d‘ person.txt 101,CEO 103,COO ? 把文本 第二行到第5行内容删掉 [[email?protected] ~]# sed ‘2,5d‘ person.txt 101,CEO ? ? 把文本的 第二行以上到结尾的行都删掉 [[email?protected] ~]# sed ‘2,$d‘ person.txt 101,CEO ? ? 删除文本第二行,第三行 [[email?protected] ~]# sed ‘2,3d‘ person.txt 101,CEO 104,COO ? 删除文本奇数行,留下偶数行 [[email?protected] ~]# sed ‘1~2d‘ person.txt 102,CTO 104,CIO ? 把文本 第二行到? 2+2=4 第四行删掉? 2-4 删掉 [[email?protected] ~]# sed ‘2,+2d‘ person.txt 101,CEO 105,COO ? 匹配有jack字符串那行 删除掉 [[email?protected] ~]# sed ‘/jack/d‘ person.txt 101,COO ? 匹配有jack字符串和yy字符串的行 删除掉 [[email?protected] ~]# sed ‘/jack/,/yy/d‘ person.txt 101,COO ? 把有jack字符串的行,和第三行删掉 [[email?protected] ~]# sed ‘/jack/,COO ? ?改2.3.1 按行替换
2c 把输入的文本 替换第二行文本 [[email?protected] ~]# sed ‘2c 106,benson,CEO 106,COO ? ? 文本替换
? sed软件替换模型(方框▇被替换成三角▲)
? s要和g配合使用 观察特点
? [[email?protected] ~]# sed ‘s/jack/ben/g‘ person.txt 101,ben,COO ? -i 修改文件内容 [[email?protected] ~]# sed -i ‘s/jack/ben/g‘ person.txt [[email?protected] ~]# cat person.txt 101,COO 企业案例3:指定行修改配置文件指定行精确修改配置文件,这样可以防止修改多了地方。 [[email?protected] ~]# sed ‘3s#0#9#‘ person.txt 101,CTO 193,COO 变量替换再新建一个文本 [[email?protected] ~]# cat test.txt a b a 赋值 [[email?protected] ~]# x=a [[email?protected] ~]# y=b [[email?protected] ~]# echo $x $y a b 把文本里所有a字符串替换成b 没有引号,用的就是双引号 [[email?protected] ~]# sed s#$x#$y#g test.txt b b b 单引号,没有变量置换功能,所见所得,是什么输出什么 [[email?protected] ~]# sed ‘s#$x#$y#g‘ test.txt a b a 双引号 [[email?protected] ~]# sed "s#$x#$y#g" test.txt b b b ? ? 分组替换
|