Linux处理文本文件的工具:

    grep        过滤文件内容

    sed            编辑文件内容

    awk

            正则表达式Regex

            

正则表达式Regex

sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过。

sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。本文主要介绍sed的一些基本用法,并通过shell脚本演示sed的使用实例。

(1)匹配单个字符的元字符

    .

    

    [abc]    [a-z]    [A-Z]    [0-9]    [a-zA-Z0-9]    [^a-z]

    

    [[:alpha:]]        [[:upper:]]        [[:lower:]]     [[:digit:]]

    
(2)匹配字符出现位置

    ^str   以...开头

    str$   以...结尾

    ^$        空行

(3)匹配字符出现的次数

    *    

    \?

    \+

    \{3\}

    \{2,5\}

    \{2,\}

    
sed: Stream Editor 流编辑器

    行编辑器  逐行编辑

    
将每行内容读入到内存中,在内存中进行处理,将结果返回给屏幕,此段内存空间称为摸索空间

默认不编写原文件,仅对模式空间的数据进行处理,处理结束后,将模式空间的内容显示到屏幕

sed命令的使用格式

# sed [option] scripts file1 file2...

# sed [option] 'AddressCommand' file1 file ...

    Address:表示对那些进行处理

    Command:操作命令

    

    option选项:

        -n:不在显示模式空间的内容(默认显示)

        -i:直接修改原文件

        -e:‘AddressCommand’ -e ‘AddressCommand’:同时执行多个匹配操作

             [root0shell ~]+ sed -e ‘/^#/d’ -e '/^5/d' /etc/fstab

        

        -f:FILE将多个AddressCommand保存至文件中,每行一个AddressCommand;读取该文件中的操作同时执行多个操作

         -r:表示使用扩展正则表达式

Address表示方法:
(1)StartLine, EndLine

    1, 100

    1,$

(2)lineNumber

    3

(3)Startline, tn

    5,+2     /root/,+2

(4)/正则表达式/

    /root/

    /bash$/

(5)/正则表达式1/, /正则表达式2/

    第1次被Regex1匹配的行升始,到第1次被Regex2匹配的行中同的所有行

d删除

删除前4行

[root@wei init.d]# sed '1,4d' nginx.sh 

删除最后一行

[root@wei init.d]# sed '$d' nginx.sh 

删除#开头的行

[root@wei ~]# sed '/^#/d' /etc/fstab

删除/开头的行

[root@wei ~]# sed '/^\//d' /etc/fstab 

删除带数字的行

[root@wei ~]# sed '/[0-9]/d' /etc/fstab 

p 显示符合条件的行

 

 显示以/开头的行

[root@wei ~]# sed -n '/^\//p' /etc/fstab 

a  \string  在符合条件的行后追加新行,string为追加的内容

    在以/开头的行后面追加# hello word

    

    [root@wei ~]# sed '/^\//a\# hello word' /etc/fstab 

    在以/开头的行后面分别追加# hello word  # hello linux

    [root@wei ~]# sed '/^\//a\# hello word' /etc/fstab 

i     \string  在符合条件的行前追加新行,string为追加的内容

    在文件的第一行追加 # hello linux

    

    [root@wei ~]# sed '1i \# hello linux' /etc/fstab 

c   \string 替换指定的内容

    将文件中最后一行的内容替换为 end of file

    

    [root@wei ~]# sed '$c\end of file' /etc/fstab 

    
=   用于显示每一行的行号

    显示/etc/passwd文件最后一行的行号

    [root@wei ~]# sed -n '$=' /etc/passwd

r  file_name   将指定的文件的内容添加到符合条件的后面

    将文件的第二行后面追加/etc/fstab

    

    [root@wei ~]# sed '2r /etc/issue' /etc/fstab 

w  file_name   将符合条件的内容另存到指定的文件中

    将以#开头的行另存到/1.txt中

    

    [root@wei ~]# sed '/^#/w /root/1.txt' /etc/fstab 

查找并替换

默认情况下,只替换每一行第一次出现的字符

s  /old/new/[修饰符]

    

    old:正则表达式/

    new:替换的内容

    

    修饰符

        g:替换第一行所有的字符

        i:忽略大小写

查找文件的UUID,并替换成uuid

[root@wei ~]# sed 's/UUID/uuid/' /etc/fstab 

将行首的/替换成#

[root@wei ~]# sed 's/^\//#/' /etc/fstab 
[root@wei ~]# sed 's|/|#|g' /etc/fstab 

将每一行出现的所有/替换成@

[root@wei ~]# sed 's/\//@/g' /etc/fstab

Linux shell sed命令使用的更多相关文章

  1. Linux shell sed命令在文件行首行尾添加字符

    昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~ 用sed命令在行首或行尾添加字符的命令有以下几种: 假设处理的文本为test.f ...

  2. Linux shell sed 命令详解

    详细的sed命令详解,请参考https://my.oschina.net/u/3908182/blog/1921761 sed命令常见用途 查找关键词做全局替换 查找某行的关键词做替换 查找关键字所在 ...

  3. linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号

    linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号 实现的功能是吧换行符换成逗号了,自己试验过. 求解释,:t N b t 都是什么意思??? :t 定义la ...

  4. Linux shell tr 命令详解

    该随笔摘自 https://www.jb51.net/article/103892.htm Linux shell tr 命令详解 1. 用途 tr,translate的简写,主要用于压缩重复字符,删 ...

  5. linux中sed命令(全面解析)

    目录 一:linux中sed命令介绍 1.sed作用 2.sed命令格式 3.参数 4.sed的编辑模式 5.sed参数解析用法 二:sed 参数 -f 案例实战解析 1.前介 2.引入简介 3.方法 ...

  6. Linux系统sed命令常用参数实战

    Linux系统sed命令常用参数实战 常用参数 -n 输出某行的文本内容,通常与p联合使用, -e 命令行模式下进行sed的动作编辑,输出编辑后的内容,源文件不会发生变化 -f 以命令中指定的scri ...

  7. [Shell]sed命令在MAC和Linux下的不同使用方式

    ---------------------------------------------------------------------------------------------------- ...

  8. Linux shell日常命令和技巧

    转自:http://www.vaikan.com/linux-shell-tips-and-tricks/ 原文:http://www.techbar.me/linux-shell-tips/ 使用L ...

  9. linux中sed命令的使用

    sed命令是linux或者shell编程中常用的筛选.替换命令,如果能熟练使用sed则对经常使用的人来说在工作上是非常有帮助的 下面把sed主要的用法列出来(有错误的地方大家可以指正): p命令只打印 ...

随机推荐

  1. 关于const关键字

    const:ES6新增关键字,用于声明创建一个值的只读引用. 我们都知道,const一般用来定义常量,在声明的时候需要赋初始值,而且初始值一旦赋值,便不能改变. 但是以上说的是针对于基本类型数据的定义 ...

  2. 字符串s倒序输出

    编程将字符串s倒序输出,要求利用函数递归实现. 输入格式要求:"%s" 提示信息:"input your string:\n" 输出格式要求:"%c& ...

  3. 洛谷 题解 P4198 【楼房重建】

    首先明确问题,对于每栋楼房的斜率K=H/X,问题就是问有多少个楼房的K比前面所有楼房的K都要大. 这题树套树当然可以,但是挺麻烦的,本渣觉得最简单就是分块…… 将N个楼房分成T块,不断维护每个块内楼房 ...

  4. [LeetCode] 884. Uncommon Words from Two Sentences 两个句子中不相同的单词

    We are given two sentences A and B.  (A sentence is a string of space separated words.  Each word co ...

  5. 关于Adobe Premiere Pro视音频不同步的解决方法

    在Potplayer和系统播放器都正常 但Pr里面就是音画不同步 原因是Pr识别错误,让音频比视频快了,这时要将视频后拉一点就ok了

  6. BS项目启动任意EXE文件或者CS项目

    1. 基于注册表启动exe程序 1. 桌面新建注册表执行文件:protocal.reg 2. 任意文本编辑器打开该文件 Windows Registry Editor Version 5.00 [HK ...

  7. swagger案例Swagger案例

    pom <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework ...

  8. 谈谈 Callable 任务是怎么运行的?它的执行结果又是怎么获取的?

    谈谈 Callable 任务是怎么运行的?它的执行结果又是怎么获取的? 向线程池提交Callable任务,会创建一个新线程(执行任务的线程)去执行这个Callable任务,但是通过Future#get ...

  9. Mono 下的 ASP.NET 可以运行在哪些 Web 服务器上?

    Mono has an implementation of ASP.NET 2.0, ASP.NET MVC and ASP.NET AJAX. Quick Resources: ASP.NET FA ...

  10. 练手WPF(一)——模拟时钟与数字时钟的制作(上)

    一.Visual Studio创建一个WPF项目. 简单调整一下MainWindow.xaml文件.主要使用了两个Canvas控件,分别用于显示模拟和数字时钟,命名为AnalogCanvas.digi ...