概要:分别的作用

grep:文本过滤(模式:pattern)工具,grep,egrep,fgrep,擅长过滤。

sed:stream editor 文本编辑工具;(流编辑器),擅长取行、替换。

awk:linux上的实现gawk,文件报告生成器;(独立的编程语言),过滤内容,擅长取列。

find: linux上实时查找工具,通过便利指定路径下得文件系统完成文件查找。

参考1、:《曝光linux企业运维实战》

参考2、:https://www.cnblogs.com/maxincai/p/5146338.html

一、sed

  sed是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑

  1、语法

    sed  [-options] ['commands']  filename;

  sed工具默认处理文本,文本内容输出屏幕已经修改,但是文件内容没有修改,需要加-i参数,对文件进行彻底修改

  2、参数及命令

    x:指定行号

    x,y:指定从x到y的行号范围

    /pattern/:查询包含模式的行

    /pattern/pattern/:查询包含两个模式的行

    /pattern/,x:从与pattern的匹配行到x号行之间的行

    x,/pattern/:从x号行到与pattern的匹配行之间的行

    x,y!:查询不包括x和y行号的行

    r:从另一个文件中读文件

    w:将文本写入到一个文件

    y:变换字符

    q:第一个模式匹配完成后退出

    l:显示与八进制ASCII码等价的控制字符

    {}:在定位行执行的命令组

    p:打印匹配行

    P:打印模板块的行

    =:打印文件行号

    a\:在定位行号之后追加文本信息

    i\:在定位行号之前插入文本信息

    d:删除定位行

    D:删除模板快第一行

    c\:用新文本替换定位文本

    s:使用替换模式替换相应模式

    n:读取下一个输入行,用下一个命令处理新的行

    N:将当前都入行的下一行读取到当前的模式空间

    h:将模式缓冲区的文本赋值到保持缓冲区

    H:将模式缓冲区的文本追加到保持缓冲区

    x:互换模式缓冲区和保持缓冲区的内容

    g:将保持缓冲区的内容赋值到模式缓冲区

    G:将保持缓冲区的内容追加到模式缓冲区

    

   3、元字符集

    ^ :匹配行开始,/^sed/

    $:匹配行结束

    .:匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d

    *:匹配0个或多个字符,/*sed/

    []:匹配一个指定范围内的字符/[sS]ed/

    [^]:匹配一个不在指定范围内的字符,/[^A-RT-Z]E/匹配A-R和T-Z的一个字幕开头,紧跟ed 的行

    (..):匹配子串,保存匹配的字符,如s/(abc)de/\1rs,abcde被替换成abcrs。

    &:保存搜索字符用来替换其他字符,s/abc/&/,abc成abc

    <:匹配单词的开始,如:/<abc/匹配包含以abc开头的单词的行

    >:匹配单词的结束

    x{m}:重复字符x,m次,/0{5}/匹配包含5个0的行

    x{m,}:重复字符x,至少m次

    x{m,n}:重复字符x,至少m次,不多于n次

二、练习案例

  1、替换abc.txt文本中abc为ddd

sed 's/abc/ddd/g' abc.txt

  2、打印abc.txt文本第一行到第三行

sed -n '1,3p' abc.txt

  3、打印abc.txt文本中第一行与最后一行

sed -n '1p; $p' abc.txt

  4、删除abc.txt文本第一行至第三行、删除匹配行至最后一行

sed  '1,3d' abc.txt  
sed '/df/,$d' abc.txt

  5、删除abc.txt文本最后6行及删除最后一行

?

 sed  '$d' abc.txt

  6、删除abc.txt最后6行

不会做,有没有会的????????

  7、在abc.txt查找abc所在行,并在其下一行添加word字符,a表示在其下一行添加字符串

sed '/abc/aword' abc.txt

  8、在abc.txt查找ddd所在行,并在其上一行添加word字符,i表示在其上一行添加字符串

sed '/aaa/iword' abc.txt

  9、在abc.txt查找以.aaa结尾的行,在其行尾添加字符串word,$代表结尾标识,&在sed中表示添加

sed 's/aaa$/&word/g' abc.txt 

  10、在abc.txt查找web的行,在其行首添加字符串www,^表示起始标识,&表示添加

sed '/web/s/^/&www/' abc.txt 

  11、多个sed命令组合,使用-e参数

sed -e '/www.zxg.com/s/^/&1./' -e 's/www.zxg.com$/&./g' abc.txt
ddd

  12、多个sed命令组合,使用“;”分割,效果跟上面一样

sed -e '/www.zxg.com/s/^/&1./;s/www.zxg.com$/&./g' abc.txt  

  13、sed读取系统变量,进行变量替换

sed "s/www.zxg.com/$WEBSITE/g" abc.txt

  14、修改SELinux策略,enforcing为disabled,查找/SELINUX/行,然后将其行enforcing值改为disabled,!s表示不包括SELINUX行

sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config

三、sed高级语法

  1、N、D、P:处理多行模式空间的问题

  2、H、h、G、g、x:将模式空间的内容放入存储空间以便接下来的编辑

  3、 :、b、t:在脚本中实现分支与条件结构

 实例:

   1、在abc.txt每行后加入空行,也即每行占用两行空间,每一行后边插入一行空行、两行空行即前三行每行后插入空行

  

sed '/^$/d;G' abc.txt
sed '/^$/d;G;G' abc.txt 
sed '/^$/d;1,3G;' abc.txt  

  

    2、将abc.txt偶数行删除及隔两行删除一行

sed 'n;d' abc.txt
sed 'n;n;d'  abc.txt

    3、在abc.txt匹配行前一行、后一行插入空行以及同时在匹配前后插入空行

sed '/abc/{x;p;x}' abc.txt
sed '/abc/G' abc.txt
sed '/abc/{x;p;x;G}' abc.txt  

    4、在abc.txt每行前加入顺序数字序号、加上制表符 "\t"即 "."符号

[root@web1 sed]# sed = abc.txt|sed 'N;s/\n/ /'
ddd
www.zxg.com
web
aaaa
aaa
bdc
abc
ac
ab
dfadfsfaklfjksdaf
adfafdfasfdfadsfs
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
cccccccccccccccccccc
C
[root@web1 sed]# sed = abc.txt|sed 'N;s/\n/\t/'
ddd
www.zxg.com
web
aaaa
aaa
bdc
abc
ac
ab
dfadfsfaklfjksdaf
adfafdfasfdfadsfs
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
cccccccccccccccccccc
C
[root@web1 sed]# sed = abc.txt|sed 'N;s/\n/\./'
.ddd
.www.zxg.com
.web
.aaaa
.aaa
.bdc
.abc
.ac
.ab
.dfadfsfaklfjksdaf
.adfafdfasfdfadsfs
.aaaaaaaaaaaaaaa
.bbbbbbbbbbbbbbbbbb
.cccccccccccccccccccc
.C
[root@web1 sed]#

    5、删除abc.txt行前和行尾的任意空格

[root@web1 sed]# sed 's/^[ \t]*//;s/[ \t]*$//' abc.txt
ddd
www.zxg.com
web
aaaa
aaa
bdc
abc
ac
ab
dfadfsfaklfjksdaf
adfafdfasfdfadsfs
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
cccccccccccccccccccc
C
[root@web1 sed]# cat abc.txt
ddd
www.zxg.com
web
aaaa
aaa
bdc
abc
ac
ab
dfadfsfaklfjksdaf
adfafdfasfdfadsfs
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
cccccccccccccccccccc
C
[root@web1 sed]#

    

    6、打印abc.txt关键词abc与ab之间的内容

[root@web1 sed]# sed -n '/abc/,/ab/'p abc.txt
abc
ac
ab
[root@web1 sed]#

    7、打印及删除abc.txt最后两行

[root@web1 sed]# sed '$!N;$!D' abc.txt
cccccccccccccccccccc
C
[root@web1 sed]# sed 'N; $!P; $!D; $d' abc.txt
ddd
www.zxg.com
web
aaaa
aaa
bdc
abc
ac
ab
dfadfsfaklfjksdaf
adfafdfasfdfadsfs
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
[root@web1 sed]#

  

转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/10824548.html

简单介绍shell编程四剑客之sed的更多相关文章

  1. 简单介绍shell编程四剑客之awk

    概要:分别的作用 grep:文本过滤(模式:pattern)工具,grep,egrep,fgrep,擅长过滤. sed:stream editor 文本编辑工具:(流编辑器),擅长取行.替换. awk ...

  2. 简单介绍shell编程四剑客之grep

    概要:分别的作用 grep:文本过滤(模式:pattern)工具,grep,egrep,fgrep,擅长过滤. sed:stream editor 文本编辑工具:(流编辑器),擅长取行.替换. awk ...

  3. shell 编程四剑客简介 find sed grep awk(微信公众号摘抄)

    一,Shell编程四剑客之Find 通过如上基础语法的学习,读者对Shell编程有了更近一步的理解,Shell编程不再是简单命令的堆积,而是演变成了各种特殊的语句.各种语法.编程工具.各种命令的集合. ...

  4. Shell编程四剑客包括:find、sed、grep、awk

    一.Shell编程四剑客之Find Find工具主要用于操作系统文件.目录的查找,其语法参数格式为: find path -option [ -print ] [ -exec -ok command ...

  5. shell编程学习笔记之sed编辑器

    在shell编程中,大多数处理的都是文本文件.对文本文件进行处理除了使用交互式文本编辑器(vi[m],gedit......)也可以使用另外一类:流编辑器. 流编辑器:使用预定义的编辑规则来对文本进行 ...

  6. Shell 编程 文本处理工具 sed

    本篇主要写一些shell脚本文本处理工具sed的使用. 概述 sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除.替换.添加 ...

  7. Linux Shell编程第4章——sed和awk

    目录 sed命令基本用法 sed命令实例 命令选项 文本定位 编辑命令 awk编程模型 awk编程实例 1.awk模式匹配 2.记录和域 3.关系和布尔运算符 4.表达式 5.系统变量 6.格式化输出 ...

  8. 四剑客(sed)

    一. sed sed简介: 用Linux环境中的编辑器程序来编辑文本文件.这些编辑器可以让你用简单命令或鼠标单击来轻松地处理文本文件中的文本.但有时候,你会发现需要自动处理文本文件,可你又不想动用全副 ...

  9. 编程四剑客awk

    awk  'pattern +{action}' file (1)AWK基本语法参数详解 a:单引号 ''是为了和shell命令区分开: b:大括号{}表示一个命令分组: c:pattern 是一个过 ...

随机推荐

  1. Spring事务采坑 —— timeout

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_18860653/article/d ...

  2. About & Ideas & Queries

    About Blog主现高一,文化课和OI啥都不会 本Blog主太懒,所以很多内容都缩在一个文章里,如数学.图论大礼包 https://wenku.baidu.com/view/56d76029647 ...

  3. TensorFlow(十二):使用RNN实现手写数字识别

    上代码: import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #载入数据集 mnist ...

  4. 数据结构实验之图论九:最小生成树 (SDUT 2144)

    #include<bits/stdc++.h> using namespace std; typedef long long ll; struct node { int s, e; int ...

  5. vscode搭建springboot开发环境

    1. JDK,Maven 1.1 下载略 1.2 设置系统环境变量 jdk增加环境变量JAVA_HOME=C:\Program Files\Java\jdk1.8.0_191(安装路径) 增加路径Pa ...

  6. 打造简单OS-总目录

    1-汇编写入引导区,虚拟机启动步骤 (了解即可) 2-开机BIOS初始化与MBR操作系统引导详解 (了解即可) 3-MBR引导区转移加载简单程序(突破512限制)(了解即可) 4-loader硬盘加载 ...

  7. Docker Dockerfile 定制镜像

    使用 Dockerfile 定制镜像  镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么无法重复的问题 ...

  8. 2018-2019-2 网络对抗技术 20165231 Exp9 Web安全基础

    实验内容 本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分.包括(SQL,XSS,CSRF).Webgoat实践下相关实验. 实验过程 WebGoat: Webgoat是OWA ...

  9. Laravel 中 Session 的使用问题(dd()导致laravel中session取值问题)

    Laravel 中 Session 的使用问题(dd()导致laravel中session取值问题) 一.总结 一句话总结: Laravel 会首先收集需要写入 Session 的所有数据,并在用户的 ...

  10. STM32 + RT Thread OS 串口通讯

    1.   创建项目 a)   禁用Finsh和console b)   默认情况下,项目文件包含了finsh,它使用COM1来通讯,另外,console输出(rt_kprintf)也使用了COM1.因 ...