一: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. Linux常用指令grep(搜索过滤)

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

  2. LeetCode 36. 有效的数独(Valid Sudoku)

    题目描述 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗 ...

  3. MemoScope.Net

    What is MemoScope.Net ? It's a tool to analyze .Net process memory: it can dump an application's mem ...

  4. 一、基础篇--1.2Java集合-HashMap死循环问题

    为什么HashMap会出现死循环 首先,我们知道java的HashMap不是线程安全的.多线程下应该使用ConcurrentHashMap. HashMap底层是基于动态数组和单向链表(JDK1.7, ...

  5. cad二次开发中DBText对象的外框GeometricExtents有问题?

    CAD2007版本 acDoc.Editor.WriteMessage( string.Format("[{0:F1},{1:F1},{2:F1}] - [{3:F1},{4:F1},{5: ...

  6. 生成ip地址表的不同姿势--脚本生成和echo命令生成

    前段时间参加了几个线下的靶机攻防比赛,几十个队伍,如果攻击的时候一个个攻击就非常麻烦,浪费时间.所以需要批量攻击.批量攻击就需要一个完整的ip地址表.在这里总结一下... 有不足的地方欢迎评论 一.脚 ...

  7. java 斐波那契数列

    package feibo; public class Feibo { static int ss = 50; public static void main(String[] args) { // ...

  8. springmvc+mybatis多数据源切换

    前文:之前练习SSM时配置的都是单数据源,现在项目需求多数据源,所以自己查阅了以下资料,在controller中手动切换数据源成功,以下的配置细节. 实际上应该在dao层进行注解的方式切换,使用AOP ...

  9. 阶段3 3.SpringMVC·_07.SSM整合案例_06.ssm整合之编写MyBatis框架

    需要先搭建Mybits的环境. 用Mybits的注解的方式.把两个方法的sql语句写完 SqlMapConfig.xml resources下新建xml文档 把约束粘贴过来 两步操作 环境标签叫做en ...

  10. kafka Windows安装

    1:安装JDK. 2:安装Zookeeper 下载地址:https://zookeeper.apache.org/releases.html 下载后,解压放在目录D:\bigdata(本文所用的目录) ...