sed的增删改查、sed常见问题


作者Georgekai

归档:学习笔记

2018/1/10

本章正题:sed的使用、sed常见问题

1.1 SED

1.1.1 sed是什么 :全称字符流编辑器Stream Edite

1.1.2 sed功能与版本:

1. 处理纯文本文件、日志、配置文件

2. 增删改查

3. 查看sed版本:sed --version

1.1.3 语法格式

1. sed  [选项]  [sed指令]  [输入文件]

2. sed -i.bak 's#oldboy#oldbgirl#g' oldboy.txt

3. -i ---sed命令的参数

4. s --sed指令

5. g ---就是个修饰

1.1.4 sed命令的实行过程  

1. 把内容读取到内存中(模式空间)

2. 判断是否是满足我要的条件(默认都会显示到屏幕)

3. 3. sed有个默认输出所以不加-n,都会显示到屏幕

4. 继续读取直到最后一行

1.1.5 sed常用功能

实验环境:

[[email protected] ~]# vim person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

实例1-1 查询p(print)

1. 单行 - 行号

[[email protected] ~]# sed -n '3p' person.txt

2. 找出包含oldboy的行

[[email protected] ~]# sed -n '/oldboy/p' person.txt

注://中间可以写需要找的内容

3. 多行连续显示(知道行号)

[[email protected] ~]# sed -n '1,3p' person.txt

4. 多行连续显示,显示包含oldboy的行到包含yy的行(不知道行号,模糊查找)

[[email protected] ~]# cat person.txt|sed -n '/oldboy/,/yy/p'

5. 显示不连续的行

[[email protected] ~]# nl person.txt |sed -n '1p;3p;4p'

注:sed或awk中,加多个命令,用分号分割(;)

实例1-2 增加

1. 在文件最后一行增加俩行

方法一:[[email protected] ~]# echo -e "106,wuxingge,UFO\n107,lee,XO" >>person.txt

方法二:[[email protected] ~]# nl person.txt |sed -n '$a 106,wixingge,UFO\n107,lee,XO.p'

注:1. 这里的$表示最后一行,a前面可加行号

2. a === append追加,当前行的下一行追加

3. i === insert插入,当前行的上一行插入

4. 中间的\n ,表示回车键

方法三:[[email protected] ~]# cat >> person.txt <<EOF

EOF

实例1-3 删除

1. 单行删除

[[email protected] ~]# nl person.txt |sed '1d' -i

2. 多行删除

[[email protected] ~]# cat person.txt |sed '/old/,/yy/d'

[email protected] ~]# cat person.txt|sed '1d;3d;4d;5d'

2.不显示文件的空行

方法一:[[email protected] ~]# cat person.txt |grep -v '^$'

方法二:[[email protected] ~]# cat person.txt |sed -n '/^$/!p'

注:!在sed中也是取反的意思

方法三:[[email protected] ~]# cat person.txt |sed '/^$/d'

方法四:[[email protected] ~]# cat person.txt |awk '!/^$/'

 

实例1-4 替换s

注:在“s###g”中遇到以#开头的条件,3个#可以用3个@代替

1. 不加小g,默认只替换每一行的第一个找到的条件

[[email protected] ~]# sed 's#[1-9]#AAAA#' person.txt

注:后面加g,会替换每一行满足条件的所有

2. 备份

[[email protected] ~]# sed -i.bak.$(date +%F) 'sg#old#boy#' person.txt

注:先备份源文件,在修改源文件的内容

3. sed中变量的使用

[[email protected] ~]# x=oldboy

[[email protected] ~]# y=oldgirl

[[email protected] ~]# sed "s#$x#$y#g" person.txt

注:sed的使用变量需要用双引号

4. 单引号与双引号区别

[[email protected] oldboy]# echo 'I'am lee'

> ^C

[[email protected] oldboy]# echo "I'am lee"

I'am lee

[[email protected] oldboy]# echo 'I"am" lee'

I"am" lee

 

实例1-5 反向引用(先保护,在使用)

1. &符号的作用

[[email protected] ~]# echo '123456' |sed -r 's#.#<&>#g'

<1><2><3><4><5><6>

注:& 表示前俩个#号中间正则匹配到的所有内容

2. 命令拼接,批量修改文件名称

创建环境:

[[email protected] ~]# touch oldboy{01..10}.jpg

如何修改:

方法一:[[email protected] ~]# ls oldboy*.avi|sed -r 's#(.*).avi#mv & \1.jpg#g'|bash

注:1.bash的作用,执行前面管道后输出的内容

2.& 表示前俩个#号中间正则匹配到的所有内容

3.\1 表示前面()中的内容

方法二:把以txt结尾的文件,中的txt替换成jpg

[[email protected] ~]# rename txt jpg old*.txt

[[email protected] ~]# ls

oldboy01.jpg  oldboy04.jpg  oldboy07.jpg  oldboy10.jpg

oldboy02.jpg  oldboy05.jpg  oldboy08.jpg  person.txt

oldboy03.jpg  oldboy06.jpg  oldboy09.jpg

格式

rename    form                 to                       file

要替换的源内容是什么       替换成什么内容             替换哪些文件

jpg                                          avi                                                       *.jpg

1.1.6 使用sed命令的常见问题

1. -r与-i同时使用

-ri (正常):先使用扩展正则,在修改文件内容

-ir :先备份文件名为“什么什么r”的备份文件,然后在替换源文件中的内容

2. -i禁止与-n一起使用

如:sed -ni '1p' person.txt  会把源文件内容清空,只留下第一行

原文地址:http://blog.51cto.com/13055758/2059482

时间: 2024-11-08 08:26:59

sed的增删改查、sed常见问题的相关文章

Python 模拟SQL对文件进行增删改查

1 #!/usr/bin/env python 2 # _*_ coding:UTF-8 _*_ 3 # __auth__: Dalhhin 4 # Python 3.5.2,Pycharm 2016.3.2 5 # 2017/05/15 6 7 import sys,os 8 9 def where(dbfile,where_list): #条件是一个list 10 11 def and_or_where(sub_where_list): 12 '''获取and或同时含有and.or关键字的条

【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建

数据库的创建和sql语句增删改查 1. 加载驱动. 2. 连接数据库. 3. 操作数据库. 创建表: create table person( _id integer primary key, name varchar(20), age integer ); 添加: insert into person(name, age) values('lisi', 19); 删除: delete from person where _id = 1; 修改: update person set name =

ssm框架搭建+easyui增删改查实现

闲来无事,看了看别人的博客文档也跟着敲了敲,特地记录下来,方便以后学习: spring版本:4.0.6 mybatis版本:3.2.5 所有jar包打包下载:http://pan.baidu.com/s/1qLEaU 1.项目目录结构 其中,controller包下存放控制层文件,dao下存放各个model类相关的数据库操作接口,entity下放置各种model类,mappers下放置各个dao对应的映射文件,service服务层就不说了,放置各种service接口,impl是其具体实现类. 2

【Android】Sqlite数据库增删改查

Android系统内置一个Sqlite数据库,如果app需要使用Sqlite数据库数据库存储数据,Android会为此app生成一个.db文件.这个数据库在data/data/<package_name>/databases里面,其中<package_name>为该安卓app的工程包名,这个目录必须root后才能看到.在Windows,单机的应用程序,存储数据,基本放到一个文件里面,正如游戏的存档,基本就是把当前的游戏状态存到一个用户很难找到的文件里面.每次存档读档就是一个从这个存

夺命雷公狗---Thinkphp----12之文章的增删改查(图片上传和关联查询)

我们由于表分析的不够完善,所以我们来加多一个tid的字段,到时候主要目的是为了更好的遍历出文章是属于那个分类下的,表如下所示: 那么下一步我们就开始创建一个ArticleController.class.php的控制器,用来管理文章的增删改查操作,所以我们开始第一步来实现文章的添加,我们先来实现他的增加功能: public function add(){ if(IS_POST){ $data['title'] = I('title'); $data['tid'] = I('tid'); $dat

MyBatis增删改查模板

1. 首先,和Spring整合一下 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springfra

用基本数据结构修改后的学生信息管理系统(增删改查)

package com.xt.student.system; //创建学生类存放信息 public class Student {//声明变量private String stuNo; private String stuName; private String gender; private int age; private int score; //对变量进行封装 public String getStuNo() {return stuNo;} public void setStuNo(St

第二周作业__增删改查

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption

zookeeper基本命令,增删改查

zookeeper被广泛的使用,由于项目中用到了dubbo框架,所以今天也来简单分享一下zookeeper的简单命令,来查询服务和节点信息,不说了,直接来增删改查命令. -h命令: [zk: localhost:2189(CONNECTED) 35] h ZooKeeper -server host:port cmd args addauth scheme auth close config [-c] [-w] [-s] connect host:port create [-s] [-e] [-