sed的基本用法

一、sed基本简介

    sed是每次读取文件一行内容到一个缓冲区中(模式空间)进行处理,这个处理是指依次调用script中的命令对模式空间中的内容处理。注意是对模式空间的内容进行处理而非原文件,如需对原文件,则需使用选项。

二、用法

sed基本用法及选项:

sed的基本用法:
        sed- stream editor for filtering and transforming text
        sed [OPTION]...{script-only-if-no-other-script} [input-file]...
        sed ‘AddressCommand’ file 
常用选项:
     -i:直接修改原文件
     -r:表示使用扩展正则表达式
     -n∶静默模式,使用安静(silent)模式。在一般sed的用法中,所有来自stdin一般都会输出到屏幕上。
      但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
     -e∶直接在指令列模式上进行 sed 的动作编辑;
     -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
   
    Address #指定对那些文本进行处理
    1、StartLine,EndLine
    比如1,100 表示从第一行到100行
    $:最后一行 如果是$的话,$与后面的命令应该有一个空格,如果是数字的话则不必
    2、/RegExp/ 还可以使用正则表达式匹配要处理的行
    /^root/
    3、/pattern1/,/pattern2/
    第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行
    4、LineNumber
    比如 sed -n ‘1p‘ filename #显示第1行
    5、StartLine, +N
    从startLine开始,向后的N行;

    COMMAND:Command #对上面Address指定的文本行进行相应的处理
           d:删除指定的行
           p:打印
           a \string:在指定的行后面追加新行,内容为string 
           i \string:在指定的行前面添加新的行,内容为string
           r FILE:将指定的文件的内容添加至符合条件的行处
           w FIEL:将地址指定的范围内的行另存之指定的文件中
           s/pattern/string/修饰符:查找并替换
           加修饰符:g:全局替换,i:忽略大小写
           例如 sed ‘s/hello/hi/gi‘ 1.txt 表示将1.txt
           中所有的hello或者HELLO或者Hello...统统替换成hello
           s///: s###, [email protected]@@  #注意不一定非得使用/// 也可以使用### @@@ 
           \(\), \1, \2  注意:()一定要进行转义 #可以像正则表达式那样使用反向引用。

上诉实例:

[[email protected] ~]# cat -n fstab
     1# /etc/fstab
     2# Created by anaconda on Tue Jul 19 14:39:24 2016
     3# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
     4# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
     5#
     6UUID=f83c52ce-5740-4f02-bb87-6e190360dc30 /                       xfs     defaults        0 0
     7UUID=c98144e4-d1b4-45b1-bb22-3112420ea487 /boot                   xfs     defaults        0 0
     8UUID=dbf5c483-133e-4888-bbb1-a9622d83a930 swap                    swap    defaults        0 0
     9#END
[[email protected] ~]# sed ‘1,6d‘ fstab
UUID=c98144e4-d1b4-45b1-bb22-3112420ea487 /boot                   xfs     defaults  0 0
UUID=dbf5c483-133e-4888-bbb1-a9622d83a930 swap                    swap    defaults  0 0
#END
[[email protected] ~]# sed -n ‘1,2p‘ fstab
# /etc/fstab
# Created by anaconda on Tue Jul 19 14:39:24 2016
[[email protected] ~]#
[[email protected] ~]# sed ‘/^UUID/a \@@@love linux‘ fstab #a \string 附加内容到匹配的行
# /etc/fstab
# Created by anaconda on Tue Jul 19 14:39:24 2016
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=f83c52ce-5740-4f02-bb87-6e190360dc30 /                       xfs     defaults  0 0
@@@love linux
UUID=c98144e4-d1b4-45b1-bb22-3112420ea487 /boot                   xfs     defaults  0 0
@@@love linux
UUID=dbf5c483-133e-4888-bbb1-a9622d83a930 swap                    swap    defaults  0 0
@@@love linux
#END
[[email protected] ~]#
[[email protected] ~]# sed ‘/^UUID/i \@@@love linux‘ fstab #指定的行前
# /etc/fstab
# Created by anaconda on Tue Jul 19 14:39:24 2016
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
@@@love linux
UUID=f83c52ce-5740-4f02-bb87-6e190360dc30 /                       xfs     defaults  0 0
@@@love linux
UUID=c98144e4-d1b4-45b1-bb22-3112420ea487 /boot                   xfs     defaults  0 0
@@@love linux
UUID=dbf5c483-133e-4888-bbb1-a9622d83a930 swap                    swap    defaults  0 0
#END
[[email protected] ~]#
[[email protected] ~]# sed -n  ‘/oot/w /tmp/oot.out‘ fstab
[[email protected] ~]# cat /tmp/oot.out
UUID=c98144e4-d1b4-45b1-bb22-3112420ea487 /boot                   xfs     defaults  0 0
[[email protected] ~]# 
[[email protected] ~]# sed -i ‘s#boot#Boot#g‘ fstab
[[email protected] ~]# grep -i "boot" fstab
UUID=c98144e4-d1b4-45b1-bb22-3112420ea487 /Boot                   xfs     defaults  0 0
[[email protected] ~]#  
[[email protected] ~]# cat sed.txt
hello, like
hi,my love
[[email protected] ~]# sed ‘s/l..e/&r/g‘ sed.txt
hello, liker
hi,my lover
[[email protected] ~]#
[[email protected] ~]# sed ‘s/\(l..e\)/\1r/g‘ sed.txt
hello, liker
hi,my lover
[[email protected] ~]#

三、练习巩固知识

1、删除/etc/init.d/functions文件中行首的空白符;
[[email protected] ~]# sed -r ‘s#^[[:space:]]+##g‘ /etc/init.d/functions
2、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5;
[[email protected] ~]# sed ‘s#id:3:initdefault:#id:5:initdefault:#g‘  /etc/inittab
3、删除/etc/inittab文件中的空白行;
[[email protected] ~]# sed -i  ‘/^$/d‘ /etc/inittab
4、删除/etc/inittab文件中开头的#号; 
[[email protected] ~]# sed ‘s/^#//g‘ /etc/inittab
5、删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符;
[[email protected] ~]# sed -r ‘[email protected]^#[[:space:]][email protected]@g‘ /etc/inittab
6、删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#
[[email protected] ~]# sed -r ‘s/^[[:space:]]+#+//g‘ /etc/inittab
时间: 2024-10-13 09:46:35

sed的基本用法的相关文章

sed命令的用法

sed命令的用法 -n:选项不打印文件的所有行 [[email protected] ~]# sed '1'p 1                  //不带-n选项,sed会把所匹配的行打印出来,  root:x:0:0:root:/root:/bin/bash             //所要求的行  root:x:0:0:root:/root:/bin/bash              // 并且打印整个文本文件  bin:x:1:1:bin:/bin:/sbin/nologin syn

sed的模式匹配用法探讨

[[email protected] Desktop]# cat sunsky a b c d e f [[email protected] Desktop]# cat sunsky|sed '1,2d'|sed '1,2d' e f [[email protected] Desktop]# cat sunsky|sed -e '1,2d' -e '1,2d' d e f 问题: sed中-e的意思是直接在指令列模式上进行sed的动作编辑按照,那么按照-e的含义,上下两组命令的执行结果应该相同,

sed命令基础用法

    sed(Stream EDitor)简介 sed是一个流编辑器编辑器,本身是一个管道命令,主要以行为单位处理文本文件,可以将数据进行替换.删除.新增.选取等特定工作:sed并不会处理文本文件本身,而是每当处理一个文件时,按顺序逐行读取到模式空间(内存)中,而后在模式空间中完成编辑,把编辑的结果输出到屏幕上,接着处理下一行,反复操作,直到文件结尾. 模式空间:将读取的内容放在内存中的一块区域编辑,这些内存空间就称为模式空间 格式: sed [options]    'Address Com

sed的标签用法

今天更新区组列表文件,其中F=16的状态是隐藏的状态,玩家是看不到的,其他F=0,添加维护中是需要将S=0变为S=10,F=0,而同步后登录游戏发现区组列表中隐藏的测试区组也出现了并且是维护的状态! 查看脚本,发现用sed将所有的F全部=0了,没有考虑隐藏F=16的情况. <Server N="测试" A="xx.xx.xx.xx" P="12345" S="0" F="16" /> sed -

sed和awk用法

正则表达式的语法: .一点代表一个字符 . 代表任意的字符. 例1:样式 .T. ,代表3 个字符,中间是T,左右两边是任意的一个字符. 例2:... 代表字符长度是3 的字符串.若想比对 . 这个字符本身,需加上转义字符(\),写成\.. 例如:样式data\....代表data.后接3 个字符,如data.txt.data.cfg.data.123 等,都符合这个样 式,但data1234 就不符合了,因为4 个点最左边的那个点,已经用\转义其特殊意义,还原为. 这个字符本身,因此,\...

正则表达式和sed命令的用法

一.            正则表达式:   正则表达式(或称Regular Expression,简称RE)就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式. 该模式描述在查找文字主体时待匹配的一个或多个字符串. 正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配.简单的说,正则表示式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表示式通过一些特殊符号的辅助,可以让使用者轻易的达到搜寻/删除/取代某特定字符串的处理程序.vim.gre

Linux三剑客之sed的基本用法介绍

[介绍] sed是一款强大的非交互式的文本编辑器,可以对文件文本进行增删改查的相关操作,本文主要是讲解以下sed的基本用法. [常用选项] -e 下一个参数为一个sed指令,一般只会用于同一行有多个sed的时候 -f 后面跟保存了sed指令的文件 -i 直接对内容进行修改,不加i时只是预览,并不做实际改动 -n 取消默认输出,只输出处理过的行. [编辑命令] a 追加·向匹配行后面插入内容 c 更改·更改匹配行的内容 i 插入·向匹配行前插入内容 d 删除·删除匹配的内容 s 替换·替换匹配到的

sed及grep用法详解

在linux系统有被称为文本处理三剑客grep,sed,awk. 今天与大家分享的就是gerp和sed处理工具,至于awk,我将会在晚些的时间与大家分享,在分享grep和sed之前我先要和大家说说正则表达,正则表达是什么呢,正则表达式就像是三剑客手里的剑,没有剑哪还能称的上什么剑客,所以我们要先了解以下正则表达式的简单用法. 什么是正则表达式: "正则表达式是描述一组字符窜特征的模式,用来匹配特定的字符串."--Ken Thompson 基本正则表达式的元字符有以下这些: . :匹配任

sed个人习惯用法总结

我这个是根据个人习惯做的笔记,一般常用的我就不记了,记一些爱忘记的!!! sed -[nerif] '行号,行号 action/str/str/action' file (/,@,#都是前面所说的地址定界符) sed '[email protected]@@' file sed 's///' file sed 's###' file 这三种方式都行 sed命令的语法格式: sed的命令格式: sed [option] 'sed command'filename sed的脚本格式:sed [opt