首页 > 其他分享 >sed基本用法与正则表达式

sed基本用法与正则表达式

时间:2022-11-01 17:22:23浏览次数:56  
标签:字符 文件 正则表达式 打印 一行 用法 重复 sed

sed 工作原理

sed即Stream Editor,和vi不同,sed是行编辑器。

Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(Pattern Space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。如果使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开。Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快。

 

Sed 基本用法

格式:

sed  [-Options]   'script;script;...'  filename

其中script是一个sed命令,sed命令一定要被包含在一对单引号中,可以是多个

 

常用选项:

-n    不自动打印

-e 多点编辑

-f 从指定文件中读取编辑脚本

-r,-E    使用扩展正则表达式

-i.bak 备份文件并原处编辑

-s 将多个文件视为独立文件,而不是单个连续的长文件流

注:

-ir  不支持

-i  -r  支持

-ri  支持

-ni  危险选项,会清空文件

 

script命令格式:地址(比如哪些行)+命令(比如增删改查)

1.不给地址:对全文进行处理 (默认自动打印)

P  打印当前模式空间的内容,追加到默认输出之后(不取消自动打印会重复打印)

 

-n      关闭默认打印 

 

2. 单地址

#:指定的行

sed -n '3p' passwd  

 

$:最后一行  

sed -n '$p'  passwd

 

/pattern/:被此模式所能够匹配到的每一行

打印 etc/fstab 非#号行 :sed -n '/^[^#]/p' /etc/fstab

 

3.地址范围

#,#  从第#行到第#行,如3,6 从第3行到第7行

seq 10 | sed -n '3,6p'

 

#,+#  从第#行到第+#行,如3,+4 从第3行到第7行

 

/pat1/ ,/ pat2/    打印以d开头的行到以s开头的行

sed -n '/^d/,/^s/p' /etc/passwd

 

4.步进:~

  1~2  奇数行

  2~2  偶数行

 

命令:

Ip  忽略大小写输出

 

d  删除模式空间匹配的行,并立即启用下一轮循环

 

a [\]test  在指定行后面追加文本,支持使用\n实现多行追加

 

多行追加

 

 

i [\]test  在行前面插入文本

 

c [\]test  替换行为单行或多行文本

 

w file    保存模式匹配的行至指定文件

sed -n '/^b/w ./sedleatn/sed.log'  /etc/passwd

 

r  file  读取指定文件的文本至模式空间中匹配到的行后

 

=    为模式空间中的行打印行号

 

正则表达式  

.    代表且只能代表一个字符
\    转义字符。例\.就只代表本身
*    重复0个或多个前面的一个字符,例o*匹配没有o,有1个o或多个oooooo
.*   匹配所有字符
^word   匹配以world开头的内容 vi/vim 里面^代表一行的开头
word$   匹配以word结尾的内容 vi/vim 里面$代表一行的结尾
^$       表示空行
[abc]     匹配字符集合内的任意一个字符[a-zA-Z],[0-9]
[^abc]   匹配不包含^之后的任意一个字符的内容
a\{n,m\}   重复n到m次,前一个重复的字符。如果用egrep/sed -r 可以去掉斜线
a\{n,\}      重复至少n次,前一个重复的字符。如果用egrep/sed -r 可以去掉斜线
a\{n\}     重复n次,前一个重复的字符。如果用egrep/sed -r 可以去掉斜线
a\{,m\}      最多m次

+    表示重复“一个或一个以上”前面的字符(*是0或多个)
?     表示重复“0个或一个”前面的字符(.是有且只有1个)
|     表示同时过滤多个字符串
()      表示分组过滤,后向引用

标签:字符,文件,正则表达式,打印,一行,用法,重复,sed
From: https://www.cnblogs.com/gengxiaonuo/p/16829373.html

相关文章

  • CyclicBarrier、CountDownLatch、Semaphore的用法
    CyclicBarrier、CountDownLatch、Semaphore的用法CountDownLatch(线程计数器)CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有......
  • shell中的文本处理命令和正则表达式
    一、文本处理命令1.1、sort命令 使用格式:sort [选项] 参数常见选项:选项作用-f忽略大小写,将小写字母转换成大写字母来比较-b忽略每行前面的空格-n......
  • yml/yaml--文件格式/配置文件--用法/写法
    原文网址:yml/yaml--文件格式/配置文件--用法/写法_IT利刃出鞘的博客-CSDN博客简介说明     YAML 是一种简洁的非标记语言,文件名后缀为.yml,java中经常用它描述......
  • C++ 中的 auto的用法
    auto的原理就是根据后面的值,来自己推测前面的类型是什么。auto的作用就是为了简化变量初始化,如果这个变量有一个很长很长的初始化类型,就可以用auto代替。1.用auto声明的......
  • 委托+方法+lambda优雅用法
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceConsoleApp.DDUP{publiccl......
  • C++(STL):26 ---关联式容器set用法
    set容器都会自行根据键的大小对存储的键值对进行排序,只不过set容器中各键值对的键key和值value是相等的,根据key排序,也就等价为根据value排序。另外,使用set容器......
  • (转)js正则表达式验证大全
    js正则表达式验证大全(转)/判断输入内容是否为空    functionIsNull(){       varstr=document.getElementById('str').value.trim();       if(s......
  • 基本用法
    1.pom.xml<!--mybatisPlus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>2.3</version><......
  • node3_path.join和path.basename、path.extname用法
    constpath=require('path')//../会抵消一级路径constpathStr=path.join('/a','/b/c','../','./d','e')console.log(pathStr)//凡是涉及到路径拼接的问题,都要......
  • 注解用法详解——@SuppressWarnings
    作为一名有强迫症的程序员最见不得的事情之一就是程序里有警告出现,还有一大困扰就是在eclipseIDE中,起码前面有警告时会无法加入断点。一般来讲大多数警告是代码不规范或安......