一:sed基本命令

sed的使用格式

sed [optiona] ‘command’ files

sed 参数[-nefir] 动作[n1,[n2]] function
sed -n:只有经过sed特殊处理的那些行才会被列出来
-e:直接在命令行模式上进行sed的动作编辑
-f:直接将sed的动作写在文件里,-f filename则可以执行filename内的动作
-r:sed的动作支持的是扩展正则表达式,读取指定文件的内容
-i:直接修改读取到的文件的内容,而不是屏幕输出
n1,n2一般代表执行动作的行,也可以用正则表达式
function:
a:新增
c:替换
d:删除
i:插入行
p:打印
s:替换

1:以行为单位新增/删除功能

1:将/etc/passwd.bak的内容列出来并且打印行号,同时删除第2-5行
[root@localhost etc]# nl /etc/passwd.bak |sed '2,5d' #删除2到5行 [root@localhost etc]# nl /etc/passwd.bak |sed '2d' #删除第2行
[root@localhost etc]# nl /etc/passwd.bak |sed '2,$d' #删除2行到最后一行
1 root:x:0:0:root:/root:/bin/bash
[root@localhost tmp]# sed '/^$/d' passwd.bak #删除空行 2:在第二行后面,也就是第3行上,加上“I love batman!” [root@localhost etc]# nl /etc/passwd.bak | sed '2a I love batman! '
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
I love batman!
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
... 3:添加多行
nl /etc/passwd.bak | sed '2a I love batman! ... \ [敲一下回车]
> ssssss '
#以'结束多行内容
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
I love batman! ...
ssssss
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
... #模式匹配的方式
sed '/2004/a\China' xxxx.txt #希望在2004的下一行添加China
sed '/2004/i\China' xxxx.txt #希望在2004的前一行添加China
4:$:最后一行---在文档最后一行添加I love linux
[root@localhost tmp]# nl passwd.bak | sed '$a I love linx '

2:以行为单位替换/打印

1:将第2-5行的内容替换为“No 2-5 number”
[root@localhost etc]# nl /etc/passwd.bak | sed '2,5c no 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
no 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
... 2:简单直接取出你想要的行数
[root@localhost etc]# nl /etc/passwd.bak | sed '2,5p' #2-5行会重复输出
[root@localhost etc]# nl /etc/passwd.bak | sed -n '2,5p' #加上-n,只输出2-5行
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin #模式匹配的方式
[root@localhost etc]# sed -n '/root/p' passwd.bak #把包含murex字符的行输出,别忘记加上-n参数
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

3:以行为单位进行部分数据的查找以及替换的功能------可以批量处理配置文件

-s替换:分隔符/,#等等 加g:全局替换

1:直接修改文件的内容
[root@localhost etc]# sed -in 's/n$/\!/g' passwd.bak #将每一行结尾的n替换为!,注意转义
[root@localhost tmp]# ifconfig eno16777728 | sed -n '/inet /p' | sed 's/inet//g' | sed 's/net.*$//' #取出IP地址

4:!取反,不打印某些行

1:不打印5到10行
[root@localhost tmp]# nl passwd.bak | sed -n '5,10!p'

5:定位间隔几行 first~step

1:间隔行输出,输出单行,第一行开始
[root@localhost tmp]# nl passwd.bak |sed -n '1~2p'
1 root:x:0:0:root:/root:/bin/bash
3 daemon:x:2:2:daemon:/sbin:/sbin/nologi!
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologi!
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdow!
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologi!
11 games:x:12:100:games:/usr/games:/sbin/nologi!
13 nobody:x:99:99:Nobody:/:/sbin/nologi!
15 polkitd:x:999:998:User for polkitd:/:/sbin/nologi!
17 avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologi!
19 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologi!

6:以行为单位插入数据

1;在1-5行,每行前插入 I love linux
[root@localhost tmp]# nl passwd.bak | sed '1,5i I love linux'
I love linux
1 root:x:0:0:root:/root:/bin/bash
I love linux
2 bin:x:1:1:bin:/bin:/sbin/nologi!
I love linux
3 daemon:x:2:2:daemon:/sbin:/sbin/nologi!
I love linux
4 adm:x:3:4:adm:/var/adm:/sbin/nologi!
I love linux
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologi!
2:使用\来转义空格,使其对其
[root@localhost tmp]# nl passwd.bak | sed '1,5i\ I love linux'
I love linux
1 root:x:0:0:root:/root:/bin/bash
I love linux
2 bin:x:1:1:bin:/bin:/sbin/nologi!
I love linux
3 daemon:x:2:2:daemon:/sbin:/sbin/nologi!
I love linux
4 adm:x:3:4:adm:/var/adm:/sbin/nologi!
I love linux
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologi!

二:高级操作命令

1:-{} :多个sed命令,用;分开

1:删除5-10行,再进行替换操作
[root@localhost tmp]# nl passwd.bak | sed '{5,10d;s/oracle/root/}'

2: -n:读取下一个输入行(用下一个命令处理)-----{}里面的n

1:操作偶数行-----调第一行的时候,读取出第二行:打印,以此类推
[root@localhost tmp]# nl passwd.bak | sed -n '{n;p}'
[root@localhost tmp]# nl passwd.bak | sed -n '2~2p' #第2行开始,间隔行为2
2 bin:x:1:1:bin:/bin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
8 halt:x:7:0:halt:/sbin:/sbin/halt
10 operator:x:11:0:operator:/root:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
14 dbus:x:81:81:System message bus:/:/sbin/nologin
16 avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
20 oracle:x:1000:1000:oracle:/home/oracle:/bin/bash
2:操作奇数行
[root@localhost tmp]# nl passwd.bak | sed -n '{p;n}'
[root@localhost tmp]# nl passwd.bak | sed -n '1~2p' #第1行开始,间隔行为2
1 root:x:0:0:root:/root:/bin/bash
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
15 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
19 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

3:-&:替换固定字符串----替换操作的优化

1:把passwd中的用户后面都添加上4个空格
[root@localhost tmp]# sed 's/^[a-z_-]\+/& /' passwd.bak
root :x:0:0:root:/root:/bin/bash
bin :x:1:1:bin:/bin:/sbin/nologin
daemon :x:2:2:daemon:/sbin:/sbin/nologin
adm :x:3:4:adm:/var/adm:/sbin/nologin
lp :x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync :x:5:0:sync:/sbin:/bin/sync
shutdown :x:6:0:shutdown:/sbin:/sbin/shutdown

4:元字符(\u,\l,\U,\L) :转换为大写,小写:\u,\l对首字母,\U,\L对一串字符

[root@localhost tmp]#  sed 's/^[a-z_-]\+/\u&/' passwd.bak   #首字母转换为大写
Root:x:0:0:root:/root:/bin/bash
Bin:x:1:1:bin:/bin:/sbin/nologin
Daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost tmp]# sed 's/^[a-z_-]\+/\U&/' passwd.bak #匹配字符串全部转换为大写
[root@localhost tmp]# sed 's/^[a-z_-]\+/\l&/' passwd.bak #首字母转换为小写
[root@localhost tmp]# sed 's/^[a-z_-]\+/\L&/' passwd.bak #匹配字符串首字母转换为小写

5:-( ) : 替换某种(部分)字符串\1,\2

1:获取ip的另一种思路
[root@localhost tmp]# ifconfig eno16777728 |grep netmask| sed 's/\(inet\)\(.*\)\(net.*\)/\2/'
192.168.1.10
[root@localhost tmp]# ifconfig eno16777728 |sed -n '/inet /p'| sed 's/\(inet\)\(.*\)\(net.*\)/\2/' 192.168.1.10
[root@localhost tmp]# ifconfig eno16777728 |sed -n '/inet /p'| sed 's/inet \([0-9.]\+.*\) net.*/\1/ '
192.168.1.10
2:获取passwd种的USER,UID,GID
[root@localhost tmp]# sed 's/\(^[a-z_-]\+\):.*$/\1/' passwd.bak #第一步
[root@localhost tmp]# sed 's/\(^[a-z_-]\+\):x:\([0-9]\+\):.*$/\1:\2/' passwd.bak #第二步
[root@localhost tmp]# sed 's/\(^[a-z_-]\+\):x:\([0-9]\+\):\([0-9]\+\):.*$/\1:\2:\3/' passwd.bak
root:0:0
bin:1:1
daemon:2:2
adm:3:4
lp:4:7
sync:5:0
shutdown:6:0
halt:7:0
mail:8:12 #### \d判断的不只是0-9,而是一个 Unicode 字符集

6:-r复制指定文件插入到匹配行-----不改变文件内容

​ -w:复制匹配行拷贝到指定文件里

1:
[root@localhost tmp]# echo -e "123\n456\n789" > 123.txt
[root@localhost tmp]# cat 123.txt
123
456
789
[root@localhost tmp]# echo -e "abc\ndef\nxyz" > abc.txt
[root@localhost tmp]# cat abc.txt
abc
def
xyz
[root@localhost tmp]# sed '1r 123.txt' abc.txt ### 读123.txt这个文件,并插入到abc.txt的第1行中
abc
123
456
789
def
xyz 2:-w:改写内容,把123.txt的第一行写入到abc.txt中
[root@localhost tmp]# sed '1w abc.txt' 123.txt
123
456
789
[root@localhost tmp]# cat abc.txt #abc的原内容会被覆盖
123

7:-q退出

1:到第5行就退出sed
[root@localhost tmp]# nl passwd.bak | sed '5q'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

8:识别空格和制表符(tab)

[root@localhost tmp]# cat tab_space.txt
this is tab finish.
this is several space finish.
[root@localhost tmp]# sed -n l tab_space.txt ### -n l是L的小写字母
this is\ttab\tfinish.$
this is several space finish.$

sed---流文本操作的更多相关文章

  1. 【Linux】linux中文本操作利器grep,awk,sed

    grep命令 grep(global search regular expression)是一种强大的文本搜索工具,它可以使用正则表达式搜索文本,并把匹配的行打印出来.平时搜索文本中内容的时候是非常方 ...

  2. Linux Bash文本操作之sed篇其二

    上一篇总结了sed的基础应用(Linux Bash文本操作之sed篇其一),内容实在有够多,这里再对稍微高级一些的用法做一个整理,以方便使用时查阅. 查看文本内容 示例1表示在第一到第四行匹配到的行后 ...

  3. Linux Bash文本操作之sed篇其一

    作为Linux系统中文本处理的强力工具之一,sed功能强大,用法多变,值得我们好好学习. sed是用于过滤和转换文本的流编辑器. 一般情况下sed把当前处理的行存储在临时缓冲区,按指定命令处理之后将缓 ...

  4. awk、grep、sed是linux操作文本的三大利器,也是必须掌握的linux命令之一

    awk.grep.sed是linux操作文本的三大利器,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单纯的查找或匹配文 ...

  5. UNIX 系统上的文本操作简介

    http://www.oschina.net/question/129540_53561 UNIX 的基本哲学之一就是创建只做一件事并将这一件事做好的程序(或进程).这一哲学要求认真考虑接口以及结合这 ...

  6. linux 常用文本操作相关命令

    平时工作经常会对文本进行相关操作,包括读写.替换.统计等等,借此整理和学习一下有关命令. 1. cat 查看文件中的内容, -n 查看时为每一行加编号; -b 和-n类似,只不过对于空白行不编号: 2 ...

  7. Linux三剑客之sed流编辑器

    一.功能说明 Sed是Stream Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具.常用功能有增删改查,过滤,取行. 二.语法格式 Usage: sed [options] [se ...

  8. Linux命令-文件文本操作grep

    文件文本操作 grep 在文件中查找符合正则表达式条件的文本行 cut 截取文件中的特定字段 paste 附加字段 tr 字符转换或压缩 sort 调整文本行的顺序,使其符合特定准则 uniq 找出重 ...

  9. IO流(四)__流的操作规律总结

    流的操作规律: 1.明确源和目的 源:InputStream Reader 目的:OutputStream Writer 2.明确数据是否是纯文本数据 源:是纯文本:Reader 否:InputStr ...

  10. C# IO流的操作

    C# IO流的操作非常重要,我们读写文件都会使用到这个技术,这里先演示一个文件内容复制的例子,简要说明C#中的IO操作. namespace ConsoleApplication1 { class P ...

随机推荐

  1. 输出变量的界值(int、float、long.....)

    //整型.浮点型变量表示的关键字,并给出它们各自的界值 #include<iostream> #include<climits> //包含整型数据范围的头文件 #include ...

  2. 【python / mxnet / gluoncv / jupyter notebook】变换场景的同一行人多重识别

    程序环境为高性能集群:CPU:Intel Xeon Gold 6140 Processor * 2(共36核心)内存:512GB RAMGPU:Tesla P100-PCIE-16GB * 2   数 ...

  3. Windows下设置U盘自动复制文件到本地

    一.打开记事本,把下面的代码复制进去 set fso=createobject("scripting.filesystemobject") set ws=createobject( ...

  4. Fastadmin 后台编辑,或者添加的时候,出现的问题

    1.情况如图:编辑的时候,这个关联id,默认查出来的是用户昵称,如果要显示用户名,该怎么修改,不要着急,听我慢慢道来 2.首先要找到 编辑页面,检查问题 3.完成

  5. oracle查看表空间的大小及使用情况sql语句

    --------------------------tablespace------------------------------------------------ 1.//查看表空间的名称及大小 ...

  6. wait/notify模拟连接池

    连接池中的连接可重复使用,减少每次新建和烧毁连接对资源的消耗,但连接池的容量大小也要设置合理,否则也会占用多余的资源.连接池的基本功能是获取连接和释放连接 连接在java中也是一个类,连接对象是一个普 ...

  7. EXCEL中自定义格式输入的数据怎么完整复制

    在用设置单元格式里 自定义 输入数值 如图,B列的数据,我复制后,用选择性粘贴到别的地方,还是无法将75FG4Y2一起复制过去,只能复制过去FG 怎么办? ===>先把这些复制到一个记事本里,再 ...

  8. swift--【do..catch与try,try?,try!】

    throws抛出异常, 那么就必须通过try来处理 try : 标准的处理方式, 该方式必须结合do catch来处理 try? :告诉系统可能有错, 也可能没错, 如果发生错误, 那么返回nil, ...

  9. 【巨坑】springmvc 输出json格式数据的几种方式!

    最近公司项目需要发布一些数据服务,从设计到实现两天就弄完了,心中窃喜之. 结果临近部署时突然发现.....  服务输出的JSON 数据中  date 类型数据输出格式要么是时间戳,要么是  {&quo ...

  10. spring mvc路径匹配原则

    Ant path 匹配原则 在Spring MVC中经常要用到拦截器,在配置需要要拦截的路径时经常用到<mvc:mapping/>子标签,其有一个path属性,它就是用来指定需要拦截的路径 ...