sed 命令使用

sed Stream Editor

sed 是一个文件编辑工具,把所有文件加载到内存的缓存区中,按换行符进行读取,一次从缓存区中读取一行到自己的内部空间,并完成编辑,并将结果输出到屏幕上,默认sed不会对原文件进行更改。

sed 使用格式:

    sed [options] ‘addr1[,addr2]编辑命令‘ FILE ...
    sed [options] “addr1[,addr2]编辑命令” FILE ...  \\ 当有变量替换时,使用双引号

常用选项(options):
        -n:静默模式,不输出模式空间中的内容;
        -r:扩展的正则表达式
        -f /path/to/sed_script_file:指定sed脚本文件
        -e ‘script‘ -e ‘script‘:指定多个编辑指令
        -i:直接编辑原文件

编辑命令:
        d: 删除
        p: 打印
            sed -n ‘/^#/,/^\//p‘ /etc/fstab  \\ 如果不用选项n会把模式空间的内容也一并输出
        i \text:
            # sed ‘/^#/i \begin‘ test.txt  \\ 在每个#号开头的行前插入一行begin
        a \text:  后面
        r /path/to/somefile: 在指定位置把另外一个文件的内容插入进来
        w /path/to/somefile:将符合条件的所有行保存至指定的文件中
        =:显示符合条件的行的行号

sed  -n ‘/^\//=‘  /etc/fstab

y:字符转换

sed  ‘/^#/y/abcdefg/ABCDEFG/‘ test.txt

s///: 查找条件可以使用模式,但要替换的内容不行

地址定界:

number:指定输入文件的唯一行.

startline,endline:指定开始行和结束的行如:1,5表示从1行开始到第五行结束。
        
        /pat1/,/pat2/ :第一个被模式匹配到的行到,最后一个被模式匹配到的行

              # sed -n ‘/^#/,/[[:digit:]]/p‘ test.txt

/pattern/ :被模式匹配到的行,中间包含正则表达式,如果中间为空则匹配最近一次正则表达式。

addr1,+N:匹配地址1以及后面的N行内容,如3,+4,表示从3行开始及后面4行的内容。

                # sed  ‘3,+4d‘  test.txt

\cpatternc:\c与c之间匹配扩展正则表达式,c字符可以是任意字符。

部份指令详解:

查找替换s,格式如下

# sed ‘[address]s/pattern/replacement/flags‘

address为地址定界,省略代表全文搜索。

s为替换指定

pattern为匹配的模式

replacement 为需要替换的内容

flags为标记,g 为全局替换,p打印模式空间中的内容,i: ignore-case,不区分字符大小写

示例:

如果一个指定过长,这时有必要使用-f选项指定sed脚本文件,在脚本文件中可以包含多行指令来对文件进行修改

原文件:

DEVICE=eth0
TYPE=Ethernet
ONBOOT=no
NM_CONTROLLED=yes
BOOTPROTO=none
NETMASK=255.255.255.0
gateway=192.168.0.1
DNS1=114.114.114.114

脚本

/.*/{
/ONBOOT/c ONBOOT=yes    \\ 替换
/NETMASK/i IPADDR=192.168.0.29  \\ 插入
/gateway/y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/   \\ 转换
}

执行结果

# sed -f sed.sh ifcfg-eth0 
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.0.29
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=114.114.114.114

2、匹配以UUID开头的行,把/etc/issue中的内容读取到匹配到的内容后面
# sed ‘/^UUID/r /etc/issue‘ /etc/fstab

3、将匹配到的行保存至/tmp/filetable.txt,是覆盖式添加的

# sed ‘/^\//w /tmp/filetable.txt‘ /etc/fstab

4、有如下内容文件

He like his liker.
    He like his lover.
    She love her liker.
    She love her lover.
    (1)、删除以上内容当中包含单词“l..e”前后一致的行;

       #  sed ‘/\(l..e\).*\1/d‘ test

(2)、将文件中“l..e”前后一致的行中,最后一个l..e词首的l换成大写L;

      # sed  ‘s/\(\(l\(..e\)\).*\)\2/\1L\3/g‘ test

练习:
    1、替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5;
    # sed ‘[email protected]\(id:\)[0-9]\(:initdefault\)@\15\[email protected]‘ /etc/inittab
    2、删除/etc/init.d/funcions文件中的空白行;
    # sed ‘/^$/d‘ /etc/ini.t/functions
    3、删除/etc/inittab文件中位于行首的#;
    # sed ‘[email protected]^#@@g‘ /etc/initta
    4、删除/etc/rc.d/rc.sysinit文件中以#后跟至少一个空白字符开头的行的行首的#和空白字符;
    # sed ‘[email protected]^#[[:space:]]\{1,\}@@g‘ /etc/rc.d/rc.sysinit
    5、删除/boot/grub/grub.conf文件中行首的空白字符;
    # sed ‘[email protected]^[[:space:]]\{1,\}@@‘ /boot/grub/grub.conf
    6、取出一个文件路径的目录名称,如/etc/sysconfig/network,其目录为/etc/sysconfig,功能类似dirname命令;
    # echo /etc/sysconfig/network-scripts/ifcfg-eth0/ | sed ‘[email protected][^/]\{1,\}/*[email protected]@‘
            意思找最后一个以/开头的字符串,后面跟着可有可无的/替换成什么也没有

时间: 2024-10-10 04:22:21

sed 命令使用的相关文章

学习笔记之sed命令使用

一.概述 1.  sed 全称为Stream Editor,就是行编辑器,意味着一次只处理一行文本,sed将被匹配到            的行放到自己特定的空间(通常称为模式空间)中进行编辑:然后再根据结果进行输出显示: 2.  在sed中还有一段空间称为保持空间,sed模式空间中的内容可以与保持空间的内容可以进            行自由互换,实际工作中用处很少,仅作参考: Sed工作流程如图 二.sed命令使用 sed [OPTION]... 'script' [input-file].

sed命令

文本处理三剑客: grep, egrep, fgrep:文本过滤器 sed:Stream EDitor,流编辑器,行     pattem space:模式空间.(基础)     hold space:保持空间 awk:文本格式化工具,报告生成器 语法 sed [OPTION]...  'script'  [input-file] ... script:     地址定界编辑命令         :%s/ 常用选项: -n:不输出模式空间中的内容至屏幕: -e script, --express

sed命令及vim的末行命令

sed:StreamEDitor,流编辑器,以行为单位对一个或多个文件进行编辑处理:每一次sed都会处理给定文件中的一行内容. 在sed处理文本时,将正在处理的当前行存储到临时的缓冲区中,称为"模式空间":用当前行去匹配给定的PATTERN,如果能匹配,则使用command编辑处理:如果不匹配,则默认输出至标准输出:然后继续处理下一行,直到文件的末尾. 默认情况下,sed的所有处理行为不会影响源文件的内容: 我们一般会使用sed命令来自动编辑一个或多个文件,简化对文件的循环操作: se

sed命令总结

在编写shell脚本的过程中,我们经常需要使用sed流编辑器和awk对文本文件进行处理. 什么是sed? sed是一种在线编辑器,它一次处理一行内容.sed是非交互式的编辑器.它不会修改文件,除非使用shell重定向来保存结构.默认情况下,所有的输出行都被打印到屏幕上. sed的处理过程是什么? sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下:首先sed先把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上.sed每

linux sed命令详解

Linux环境:Ubuntu16.04 sed命令 http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html http://blog.csdn.net/yiqingnian28/article/details/23133043 正则表达式 http://blog.csdn.net/wzzfeitian/article/details/8842371 sed -help 查看sed的用法 -n, --quiet, --sile

Linux的sed命令

一.初识sed 在部署openstack的过程中,会接触到大量的sed命令,比如 # Bind MySQL service to all network interfaces.sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf 那么这条命令是什么意思?接下来介绍sed命令答案自然就揭晓了.二.sed简介 sed:是一个编辑器,是一个强大的文件处理工具. sed作用:用来替换.删除,更新文件中的内容.sed能自动处理一个或多个文件. sed原理:sed

Linux三剑客之sed命令

选定行的范围:,(逗号) 删除操作:d命令 显示模式空间内容 追加(行下):a\命令 插入(行上):i\命令 退出:q命令 多点编辑:e命令 从文件读入:r命令 写入文件:w命令 替换操作:s命令 替换文本中的字符串: 全面替换标记g 保持和获取:h命令和G命令 保持和互换:h命令和x命令 sed 简介 sed 工作原理 命令格式 常用选项: 地址定界: 编辑命令: 替换标记: sed元字符集(正则表达式) 高级编辑命令: sed用法实例 作业: 作业: sed命令 sed 简介 Stream

sed命令应用详解

sed应用详解 sed是文本处理处理工具"三大剑客"之一,它 是一种流编辑器,sed一次只处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.sed不会修改原文件内容,除非你使用重定向存储输出.sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等. 用法:sed [OPTION]

sed命令(1)-基本语法和命令

注:学习sed命令的参考书籍为<Sed&Awk>,所以笔记也都是参考该书. sed命令的基本语法和命令: 一.sed命令语法 sed [options] {sed-commands} {input-file} sed是按每行依次读取input-file,然后执行sed-command,执行完的数据写入模式空间. options是用来传递sed命令的可选参数. 当需要使用多条命令的时候可以使用-e参数,其语法如下: sed [options] -e {sed-command1} -e {

第4章 sed命令

1 sed命令基本用法 sed(stream editor)是流编辑器,可对文本文件和标准输入进行编辑: sed只是对缓冲区中原始文件的副本进行编辑,并不编辑原始的文件,如果需要保存改动内容,可以选择使用下面两种方法: 重定向.w编辑命令. 2 调用sed有三种方法 在Shell命令行输入命令调用sed,格式为: sed [选项] ‘sed命令’ 输入文件 将sed命令插入脚本文件后,然后通过sed命令调用它,格式为: sed [选项] -f sed脚本文件输入文件 将sed命令插入脚本文件后,