一、sed命令

sed是一种强大的流式编辑器 (stream editor for filtering and transforming text),它能够完美的使用正则表达式,逐行处理文本并把结果显示到屏幕上。sed的强项是替换文本中的特定字符,而写shell有个步骤就是从一段文本中截取一段字符进行处理,所以熟练掌握sed命令是写shell脚本的基本技能。

用法:
sed [选项]... {脚本(如果没有其他脚本)} [输入文件]
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

选项:
-p 查找
-d 删除
-s 替换

二、sed 匹配搜索用法

sed可以向grep一样查找文件文本中包含关键字的行并把改行显示在屏幕上。
命令写法:sed -n '/(匹配的字符串)/'p 文件名(简记为-np)

1、搜索passwd文件中包含root关键字的行。

sed -n '/root/'p passwd

2、搜索ssh文件中以#开头的行

sed -n '/^#/'p ssh

3、搜索正则'o+t'类型的行

sed -nr ‘/o+t/’p passwd


注意“+”号属于扩展正则,需要跟-r选项才能用

4、搜索正则‘两次o’的行

sed -nr '/o{2}/'p passwd

5、搜索正则root或者bus的行‘root|bus’

sed -nr '/root|bus/'p passwd

6、不区分大小写搜索关键字所在的行

sed -n '/nologin/'Ip passwd 注意是大写字母I,不是管道符号|

拓展用法:打印指定的行

命令写法:sed -n ‘行号或行号描述’p 文件路径 注意单引号''内不需要跟两个//
1、显示文件第2行内容

sed -n '2'p passwd

2、显示文件第6行至10行内容

sed -n '6,10'p passwd 注意中间是逗号,不是-

3、全文显示

sed -n '1,$'p passwd 注意不能写成“sed -n '^,$'p passwd”

拓展用法: 多条件过滤

命令可以用-e参数匹配多个条件,注意多个条件是或者关系,只要符合其中的一条就会被找到,如果匹配两条规则,那么改行会显示两次

显示第一行和含有root关键字的行

sed -e '/root/'p -e '1'p -n passwd

三、sed删除特定行用法

对特定大文件,使用sed命令删除部分内容,要比vim去打开相应的文件再删除要实用的多。没有加-i选项的删除只是显示上的删除,不会影响文件本身的内容,但加了-i选项后会作用于原始文件,所以删除前一定要做好备份。

命令写法:sed '/(关键字)/'d 文件路径
1、删除文件的第一行

sed '1'd 1.txt

注意第一行已经被删掉了

2、删掉含关键字“bus”的行

sed '/bus/'d 1.txt

3、删掉特定时间段之前的文件的思路
首先用grep -n >命令通过时间关键字过滤出行数。
然后使用sed '1,找到的最后行行号‘d 方式删除数据

四、sed替换特定内容用法

命令写法:
sed '1,$s///g' 文件路径

1、替换文件前10行中的ro+为R

sed -r '1,10/ro+/R/g' 1.txt

2、替换文件中的数字为空,其实就是删掉文件中所有的数字

sed 's/[0-9]//g' 1.txt


这个命令经常被用来判断输入的内容是否是数字

3、替换文件中的字母为空,其实就是删掉文件中所有的英文字母

sed 's/[a-zA-Z]//g' 文件名 (复习tr 命令 tr [a-z] [A-Z])

4、在所有行前面加上字符串123
小括号为扩展正则符号,使用时要加-r选项。

sed -r 's/(.*)/123&/g' test.txt

五、sed调换字符串次序用法

替换文字的顺序的关键是要用合适的正则
小括号内容在下文中可以

命令写法:

sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1:/' test.txt |head -n5

该操作的难点在于分段的正则的写法。

转载于:https://blog.51cto.com/11934539/2061781

Linux shell基础(五)sed命令的更多相关文章

  1. Linux安全基础:sed命令的使用

    sed 是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作. Sed本质上是一个编辑器,但是它是非交互式的,这点与VIM不同:同时 ...

  2. Linux Shell基础 Bash常见命令 echo命令

    概述 shell中常见的命令echo. 输出命令:echo echo命令的输出内容如果没有特殊含义,则将原内容输出到屏幕:如果输出内容有特殊含义,则输出打印其含义. 命令格式如下: [root@loc ...

  3. Linux Shell基础 Bash常见命令 history、alias命令以及常用快捷键

    概述  shell中常见命令history 历史纪录命令:history 命令格式如下: [root@localhost ~]# history [选项] [历史命令保存文件] -c:清空历史命令: ...

  4. linux shell中使用sed命令

    例1:批量的将变量的值代替指定文件中的指定内容. #!/bin/bash for i in {1..100} mgr_port=`expr $i + 5345` data_port=`expr $i ...

  5. Linux Shell基础 多个命令中的分号(;)、与(&&) 、 或(||)

    概述 在 Bash 中,如果需要让多条命令按顺序执行,则有这样方法,如表 1 所示. 多命令执行符 格 式 作 用 : 命令1 ; 命令2 多条命令顺序执行,命令之间没有任何逻辑关系 &&am ...

  6. Linux Shell基础(下)

    Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...

  7. Linux shell基础知识(上)

    Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...

  8. linux shell 基础 使用日志与心得

    linux shell 基础 使用日志与心得 1.#!/bin/bash 第一行就出现#!/bin/bash是指此脚本使用/bin/bash来解释执行.其中,#!是一个特殊的表示符,其后,跟着解释此脚 ...

  9. linux shell 中的sleep命令

    开始还以为是这样的语法: sleep(1), 后面发现是: linux shell 中的sleep命令 分类: LINUX 在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小 ...

  10. 在shell中使用sed命令替换/为\/

    sed命令相关: https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html https://www.cnblogs.com/D ...

随机推荐

  1. Bitmap之内存缓存和磁盘缓存详解

    原文首发于微信公众号:躬行之(jzman-blog) Android 中缓存的使用比较普遍,使用相应的缓存策略可以减少流量的消耗,也可以在一定程度上提高应用的性能,如加载网络图片的情况,不应该每次都从 ...

  2. 微信小程序--分享功能

    微信小程序--分享功能 微信小程序前段时间开放了小程序右上角的分享功能, 可以分享任意一个页面到好友或者群聊, 但是不能分享到朋友圈 这里有微信开发文档链接:点击跳转到微信分享功能API 入口方法: ...

  3. HDFS程序开发

    占位

  4. (js描述的)数据结构[哈希表1.3](10)

    1.哈希表的完善 1.容量质数(limit):需要恒为质数,来确保元素的均匀分布. 1)普通算法: 判断一个数是否为质数 function isPrime(num) { for (var i = 2; ...

  5. flask 入门之 logging

    如想看详细说明,请到: 1.https://www.cnblogs.com/yyds/p/6901864.html 2.https://docs.python.org/2/library/loggin ...

  6. 详解java访问修饰符

    详解java访问修饰符 为了防止初学者看到因为专业的术语而感觉晦涩难懂,我接下来尽量用生动比喻的说法来解释!首先第一点,我们来讲讲什么叫修饰符!看看这个名称,想想他的意思.修饰符!修饰符!,就是用来修 ...

  7. Python设计模式(10)-模板模式

    class DbManager: def insert(self): pass def dele(self): pass class DbManager: def insert(self): pass ...

  8. 使用基于vuecli创建的目录推送到指定远程分支

    笔者使用vuecli创建项目目录以后,在想将该目录提交到远程仓库时发现行不通,在忙活了一下午以后写下此文 1.github上新建一空分支,然后克隆该分支地址:  https://github.com/ ...

  9. tf.train.GradientDescentOptimizer 优化器

    tf.train.GradientDescentOptimizer(learning_rate, use_locking=False,name='GradientDescent') 参数: learn ...

  10. Netty是如何处理新连接接入事件的?

    更多技术分享可关注我 前言 前面的分析从Netty服务端启动过程入手,一路走到了Netty的心脏——NioEventLoop,又总结了Netty的异步API和设计原理,现在回到Netty服务端本身,看 ...