Linux中的sed

sed [选项] [动作] 文件
选项:
    -n :静默模式。使用-n则只有经过sed处理的那一行。
    -e :允许多重编辑;  
    -f :结果默认输出到终端,使用-f会将结果写在一个文件内
    -i :直接对原文件进行修改。(危险)
    -p :打印模式空间的内容
    s/regexp/replacement/flag  用replacement替换模式空间由regexp匹配到的内容

动作:
    [n1[,n2]]function
    n1, n2 :表示范围,可以省略

function:
    a xxxxx:将xxxx添加到匹配到的行的后一行
    d :删除所匹配到的行
    i xxxxx:将xxxx添加到匹配到的行的前一行
    p :打印输出所匹配到的行,通常 p 会与参数 sed -n 一起运行
    s :取代,替换指定的字符串
    c :以行为单位进行替换

应用举例:

1、找出包含数字 0 的行
        # sed -n ‘/0/p‘ /tmp/passwd
        # nl /tmp/passwd | sed -n ‘/0/p‘
    
    1、找出包含任意数字的行
        # sed -n ‘/[0-9]/p‘ /tmp/passwd
       
    2、查找不包含数字 0 的行
        # sed ‘/0/d‘ /tmp/passwd

2、删除前5行中,包括数字0的行
       
    3、将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!
        # nl /etc/passwd | sed ‘2,5d‘
            1 root:x:0:0:root:/root:/bin/bash
            6 sync:x:5:0:sync:/sbin:/bin/sync
            7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

4、只要删除第 2 行
        # nl /etc/passwd | sed ‘2d‘
 
    5、要删除第 3 到最后一行
        # nl /etc/passwd | sed ‘3,$d‘
 
    6、在第二行后追加一行i am zxhk
        # nl /etc/passwd | sed ‘2a i am zxhk‘

7、在第二行前追加一行i am zxhk
        # nl /etc/passwd | sed ‘2i i am zxhk‘

6、在第二到第五行每行后都追加一个i am zxhk
        # nl /tmp/abc | sed ‘2,5a i am zxhk‘
 
    7、在第二行前追加两行i am zxhk  和 i come from china
        # nl /etc/passwd | sed ‘2a i am zxhk\
        > drink beer ?‘

8、将第2-5行的内容替换成为"i am zxhk"(以行为单位的替换与显示)
        # nl /tmp/abc | sed ‘2,5c i am zxhk‘

9、仅列出 /etc/passwd 文件内的第 5-7 行内容
        # nl /etc/passwd | sed -n ‘5,7p‘

10、搜索/etc/passwd有root关键字的行
        # nl /etc/passwd | sed ‘/root/p‘

11、删除/etc/passwd所有包含root的行
        # nl /etc/passwd | sed  ‘/root/d‘

12、将/etc/passwd中包含root的行中的bash替换为blueshell
        # nl /etc/passwd | sed -n ‘/root/{s/bash/blueshell/;p}‘
      (找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔)

数据的搜寻并替换
    sed 的搜寻与替代的与 vi 相当的类似!
    格式:
        sed ‘s/要被取代的字串/新的字串/g‘
 
    13、获取本机的ip信息,如下:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
        # ifconfig eth0 | sed -n "/inet addr/{s/^[[:space:]]*//g;p}"
       
    14、获取IP地址(后面的部分予以删除)
        # ifconfig eth0 | sed -n "/inet addr/{s/^[[:space:]].*addr://;p}" | sed -n ‘/cast/{s/[[:space:]].*//g;p}‘
        # ifconfig eth0 | sed -n "/inet addr/{s/^[[:space:]].*addr://;s/[[:space:]].*//g;p}"       
       
    15、将sysctl.conf中的net.ipv4.ip_forward = 0改为1

16、将apache的配置文件中的#ServerName www.example.com:80行首的#去掉
        # sed ‘s/^#\(ServerName www\)/\1/‘ /etc/httpd/conf/httpd.conf

17、删除file.txt中的注释行和空白行
        # sed  -e ‘/#/d‘ -e ‘/^$/d‘ file.txt

直接修改文件内容(危险动作)
    18、利用 sed 将file.txt 内每一行结尾若为 . 则换成 !
        # sed -i ‘s/\.$/\!/g‘ file.txt
 
    19、利用 sed 直接在 file.txt 最后一行加入『# This is a test』
        # sed -i ‘$a # This is a test‘ file.txt
        注意:
            $ 代表的是最后一行,a 的动作是新增,因此该文件最后新增『# This is a test』!

sed 的『 -i 』选项可以直接修改文件内容,这功能非常有帮助

Author:潇湘雨错

时间: 2024-10-09 22:16:07

Linux中的sed的相关文章

Linux中的sed详解

Sed简介 Sed取各种内容 Stream Editor  流式编辑器 又称行编辑器每次只编辑一行.Sed工作是在"模式空间"中进行的并不操作源文件.对源文件无危害. Sed使用格式 sed [-nefri] 'command' 输入文本 sed使用参数 -n 使用安静(silent)模式.在一般 sed 的用法中所有来自 STDIN 的数据一般都会被列出到终端上.但如果加上 -n 参数后则只有经过sed 特殊处理的那一行(或者动作)才会被列出来. -e 直接在命令列模式上进行 sed

Linux中使用sed命令替换字符串小结

sed替换的基本语法为: sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,例如: sed "s/原字符串包含'/替换字符串包含'/" //要处理的字符包含单引号 命令中的三根斜线分隔符可以换成别的符号,这在要替换的内容有较多斜线是较为方便,只需要紧跟s定义即可,例如换成问号”?”: sed 's?原字符串?替换字符串

Linux中的sed命令

sed - stream editor for filtering and transforming text 流编辑器的过滤和转换文本 sed [-nerf] [动作] 参数: -i 修改源文件 危险 -e 直接在命令行模式上执行sed的动作编辑 -f 直接将sed的动作写在一个文件内,-f filename 则可以执行filename内的sed动作 -r :使用扩展的正则表达式 -n 静默模式,默认的sed中所有来自stdin的数据一般都会被列出到屏幕上,但如果加上-n之后,则只有经过sed

关于linux中sed命令的简单用法

linux中sed的学习和使用 今天突然用到了sed这个命令,就即兴学习了一波突然感觉这个功能还是很强的.sed在#man sed下文档查看解释的是:用于过滤和转换文本的流编辑器.即如下图: 我自己用过这个命令之后感觉对于文档来说可以显示某个区间行,显示结果还可以在段前后添加内容删除,替换内容.但是最后才发现,怎么还能直接修改到文件里不仅仅是显示出来,文件内容直接被修改了. 下面就一一介绍这个有趣的命令,莫急莫急一个一个来. 首先找个文件(没用的文件且有内容,搞坏了系统文件可不好玩了)来当测试文

Linux中grep,sed的使用

今天,Mayuyu来讲一些Linux中常用的命令. 1. grep命令 grep用于过滤自己需要的内容,语法如下    grep Mayuyu --color 过滤出所有包含Mayuyu的行,grep中也是支持正则表达式的. 2. sed命令 使用普通的vim编辑器在编辑文件时有两个主要的问题    (1)当文件比较大的时候,需要打开文件,占用较大的内存. (2)编辑文件时,必须互动,所以很难调用vim等. sed属于流编辑器,所谓流编辑器就是在编辑文件的时候,可以不用把整个文件都读入内存,可以

linux中的文件处理grep、sed、awk

1.grep grep [options] pattern [file-]options:表示选项pattern:要匹配的模式.file:表示一系列的文件名选项:-c 只输出匹配行的计数-i 不区分大小写(用于单字符)-n 显示匹配的行号-v 不显示不包含匹配文本的所以有行-s 不显示错误信息-E 使用扩展正则表达式 grep -c 关键字 文件名 ##显示出现的关键字的行数grep -n 关键字 文件名 ##显示该关键字的行grep -n2 关键字 文件名 ##显示该关键字行的上下各两行gre

Linux中sed基础

sed是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等. sed命令常用参数 常用命令 函数命令 说明 1,n 需要操作

linux中快捷键的用法

linux中快捷键的用法 1.1 常见快捷键 ctrl + a 把光标移动到行首 ctrl + e 把光标移动到行尾 ctrl + c 撤销当前的操作=cancel ctrl + d logout命令(当前行没有任何内容,退出当前用户),删除光标所在位置后面的一个符号,文本 ctrl + l(小写字母L)清除屏幕内容 ctrl +u 剪切光标所在位置到行首内容 ctrl +k 剪切光标所在位置到行尾内容 ctrl +y 粘贴 ctrl + r search搜索历史命令,继续搜索,查找历史命令 

Linux中find常见用法示例

·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数: pathname: find命令所查找的目录路径.例如用.来表示当前目录,用/来表示系统根目录.-print: find命令将匹配的文件输出到标准输出.-exec: find命令对匹配的文件执行该参数所给出的shell命令.相应命令的形式为'command' { } \;,注意{ }和\:之间的空格.-ok: 和-exec的作用