精华内容
下载资源
问答
  • linuxsed命令详解
    2022-07-18 12:59:11

    参考:http://www.cnblogs.com/ctaixw/p/5860221.html

    sed 常用选项 和 常用命令

    sed 是一个很好的文件处理工具,本身是一个管道命令,主要是 以行为单位 进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。

    sed 的用法

    sed 命令行格式为 :(命令必须以 '' 单引号引起来)
             格式1:sed [-nefri] 'command' 输入文本
             格式2:sed [options] -f scriptfile file(s)

    常用选项:-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
            -e∶直接在指令列模式上进行 sed 的动作编辑;
            -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
            -r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
            -i∶直接修改读取的档案内容,而不是由萤幕输出。      

    常用命令:

    a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)。即在当前行下面插入文本。 
    c ∶替换, c 的后面是要替换的新的字符串(多行替换),这些字符串可以取代 n1,n2 之间的行!
    d ∶删除,因为是删除,所以 d 后面通常不接任何咚咚;
    i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前行的上一行)。
         即在当前行上面插入文本。 (会修改原始文件,谨慎使用);
    p 打印模板块的行。 
    P(大写) 打印模板块的第一行。
    s  ∶替换,可以直接进行替换(同一行内替换,不能跨行。即替换一行中的某部分),
         通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 
    
    
    D 删除模板块的第一行。
    h 拷贝模板块的内容到内存中的缓冲区。 
    H 追加模板块的内容到内存中的缓冲区。 
    g 获得内存缓冲区的内容,并替代当前模板块中的文本。 
    G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。 
    l 列表不能打印字符的清单。 
    n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。 
    N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。  
    q 退出Sed。 
    b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。 
    r file 从file中读行。 
    t label if分支,从最后一行开始,条件一旦满足或者T,t命令,
                  将导致分支到带有标号的命令处,或者到脚本的末尾。 
    T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,
              将导致分支到带有标号的命令处,或者到脚本的末尾。 
    w file 写并追加模板块到file末尾。 
    W file 写并追加模板块的第一行到file末尾。 
    ! 表示后面的命令对所有没有被选定的行发生作用。 
    = 打印当前行号码。 
    # 把注释扩展到下一个换行符以前。

    sed 替换 标记 

    g    表示行内全面替换。 
    p    表示打印行。 
    w    表示把行写入一个文件。 
    x    表示互换模板块中的文本和缓冲区中的文本。 
    y    表示把一个字符翻译为另外的字符(但是不用于正则表达式) 
    \1   子串匹配标记 
    &    已匹配字符串标记

    sed 元字符集

    ^     匹配行开始,如:/^sed/匹配所有以sed开头的行。 
    $     匹配行结束,如:/sed$/匹配所有以sed结尾的行。 
    .     匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。 
    *     匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 
    []    匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。 
    [^]   匹配一个不在指定范围内的字符。
          如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。 
    \(..\)    匹配子串,保存匹配的字符。如s/\(love\)able/\1rs,loveable被替换成lovers。 
    &     保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。 
    \<    匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行。
    >/    匹配单词的结束,如:/love\>匹配包含以love结尾的单词的行。 
    x\{m\}     重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。 
    x\{m,\}    重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。 
    x\{m,n\}   重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。

    sed 示例

    sed 用法示例

    替换操作:s 命令 
    
        替换文本中的字符串: 
            sed 's/book/books/' file
    
        -n 选项和 p命令 一起使用表示只打印那些发生替换的行: 
            sed -n 's/test/TEST/p' file 
    
        直接编辑文件选项-i,会匹配file文件中每一行的第一个book替换为books: 
            sed -i 's/book/books/g' file
    
        全面替换标记g 使用后缀 /g 标记会替换每一行中的所有匹配: 
            sed 's/book/books/g' file
    
        当需要从第N处匹配开始替换时,可以使用 /Ng: 
            echo sksksksksksk | sed 's/sk/SK/2g' 
            skSKSKSKSKSK 
            echo sksksksksksk | sed 's/sk/SK/3g' 
            skskSKSKSKSK 
            echo sksksksksksk | sed 's/sk/SK/4g' 
            skskskSKSKSK
    
    
    定界符 
    
        以上命令中字符 / 在sed中作为定界符使用,也可以使用任意的定界符: 
            sed 's:test:TEXT:g' 
            sed 's|test|TEXT|g' 
        
        定界符出现在样式内部时,需要进行转义: 
            sed 's/\/bin/\/usr\/local\/bin/g'
    
    
    删除操作:d命令 
    
        删除空白行: 
            sed '/^$/d' file 
        删除文件的第2行: 
            sed '2d' file 
        删除文件的第2行到末尾所有行: 
            sed '2,$d' file 
        删除文件最后一行: 
            sed '$d' file 
        删除文件中所有开头是test的行: 
            sed '/^test/'d file
    
    
    已匹配字符串标记& 
    
        正则表达式 \w\+ 匹配每一个单词,使用 [&] 替换它,& 对应于之前所匹配到的单词: 
            echo this is a test line | sed 's/\w\+/[&]/g' 
            [this] [is] [a] [test] [line] 
        所有以192.168.0.1开头的行都会被替换成它自已加localhost: 
            sed 's/^192.168.0.1/&localhost/' file 
            192.168.0.1localhost
    
    
    子串匹配标记\1 匹配给定样式的其中一部分: 
    
        echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/' 
        this is 7 in a number 
        命令中 digit 7,被替换成了 7。样式匹配到的子串是 7,\(..\) 用于匹配子串,
        对于匹配到的第一个子串就标记为 \1,依此类推匹配到的第二个结果就是 \2,例如: 
        echo aaa BBB | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/' 
        BBB aaa 
        love被标记为1,所有loveable会被替换成lovers,并打印出来: 
        sed -n 's/\(love\)able/\1rs/p' file
    
    
    组合多个表达式 
            sed '表达式' | sed '表达式' 
        等价于: 
            sed '表达式; 表达式'
    
    
    引用 
        sed表达式可以使用单引号来引用,但是如果表达式内部包含变量字符串,就需要使用双引号。 
        test=hello 
        echo hello WORLD | sed "s/$test/HELLO" 
        HELLO WORLD 
    
    
    选定行的范围:,(逗号) 
        
        所有在模板test和check所确定的范围内的行都被打印: 
            sed -n '/test/,/check/p' file 
        打印从第5行开始到第一个包含以test开始的行之间的所有行: 
            sed -n '5,/^test/p' file 
        对于模板test和west之间的行,每行的末尾用字符串aaa bbb替换: 
            sed '/test/,/west/s/$/aaa bbb/' file
    
    
    多点编辑:e命令 
        -e选项允许在同一行里执行多条命令: 
        sed -e '1,5d' -e 's/test/check/' file 
        上面sed表达式的第一条命令删除1至5行,第二条命令用check替换test。
        命令的执行顺序对结果有影响。如果两个命令都是替换命令,
        那么第一个替换命令将影响第二个替换命令的结果。 
    	和 -e 等价的命令是 --expression: 
    	sed --expression='s/test/check/' --expression='/love/d' file
    
    
    从文件读入:r命令 
    	file里的内容被读进来,显示在与test匹配的行后面,
        如果匹配多行,则file的内容将显示在所有匹配行的下面: 
    	sed '/test/r file' filename 
    	写入文件:w命令   
    	在example中所有包含test的行都被写入file里: 
    	sed -n '/test/w file' example
    
    
    追加(行下):a\命令 
    	将 this is a test line 追加到 以test 开头的行后面: 
    	sed '/^test/a\this is a test line' file 
    	在 test.conf 文件第2行之后插入 this is a test line: 
    	sed -i '2a\this is a test line' test.conf 
    
    
    插入(行上):i\命令 
    	将 this is a test line 追加到以test开头的行前面: 
    	sed '/^test/i\this is a test line' file 
    	在test.conf文件第5行之前插入this is a test line: 
    	sed -i '5i\this is a test line' test.conf
    
    
    下一个:n 命令 
    	如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续: 
    	sed '/test/{ n; s/aa/bb/; }' file 
    
    
    变形:y命令 
        把1~10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令: 
        sed '1,10y/abcde/ABCDE/' file 
    
    退出:q命令 打印完第10行后,退出
    	sed sed '10q' file
    
    保持和获取:h命令和G命令 
    	在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,
        除非行被删除或者输出被取消,否则所有被处理的行都将 打印在屏幕上。
        接着模式空间被清空,并存入新的一行等待处理。 
    	sed -e '/test/h' -e '$G' file 
    	在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个
        称为保持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,
        G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在
        于模式空间中的行的末尾。在这个例子中就是追加到最后一行。简单来说,
        任何包含test的行都被复制并追加到该文件的末尾。 
    
    保持和互换:h命令和x命令 
    	互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换: 
    	sed -e '/test/h' -e '/check/x' file
    
    脚本scriptfile 
    	sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。
        Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,
        如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。 
    	sed [options] -f scriptfile file(s) 
    
    打印奇数行或偶数行 
    	方法1: 
    		sed -n 'p;n' test.txt #奇数行 
    		sed -n 'n;p' test.txt #偶数行 
    	方法2: 
    		sed -n '1~2p' test.txt #奇数行 
    		sed -n '2~2p' test.txt #偶数行
    
    打印匹配字符串的下一行 
    	grep -A 1 SCC URFILE 
    	sed -n '/SCC/{n;p}' URFILE 
    	awk '/SCC/{getline; print}' URFILE

    举例:假设我们有一文件名为 ab

    删除某行
         [root@localhost ruby] # sed '1d' ab          # 删除第一行 
         [root@localhost ruby] # sed '$d' ab          # 删除最后一行
         [root@localhost ruby] # sed '1,2d' ab        # 删除第一行到第二行
         [root@localhost ruby] # sed '2,$d' ab        # 删除第二行到最后一行
    
    显示某行
         [root@localhost ruby] # sed -n '1p' ab       # 显示第一行 
         [root@localhost ruby] # sed -n '$p' ab       # 显示最后一行
         [root@localhost ruby] # sed -n '1,2p' ab     # 显示第一行到第二行
         [root@localhost ruby] # sed -n '2,$p' ab     # 显示第二行到最后一行
    
    使用模式进行查询
         [root@localhost ruby] # sed -n '/ruby/p' ab    # 查询包括关键字ruby所在所有行
         
         # 查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义
         [root@localhost ruby] # sed -n '/\$/p' ab                               
    
    增加一行或多行字符串
         [root@localhost ruby]# cat ab
         Hello!
         ruby is me,welcome to my blog.
         end
         [root@localhost ruby] # sed '1a drink tea' ab  #第一行后增加字符串"drink tea"
         Hello!
         drink tea
         ruby is me,welcome to my blog. 
         end
         [root@localhost ruby] # sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea"
         Hello!
         drink tea
         ruby is me,welcome to my blog.
         drink tea
         end
         drink tea
    
         #第一行后增加多行,使用换行符\n
         [root@localhost ruby] # sed '1a drink tea\nor coffee' ab   
         Hello!
         drink tea
         or coffee
         ruby is me,welcome to my blog.
         end
    
    代替一行或多行
         [root@localhost ruby] # sed '1c Hi' ab                #第一行代替为Hi
         Hi
         ruby is me,welcome to my blog.
         end
         [root@localhost ruby] # sed '1,2c Hi' ab             #第一行到第二行代替为Hi
         Hi
         end
    
    替换一行中的某部分
        格式:sed 's/要替换的字符串/新的字符串/g'   (要替换的字符串可以用正则表达式)
        [root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby/bird/g'   # 替换ruby为bird
       [root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby//g'       # 删除ruby
    
    插入
         [root@localhost ruby] # sed -i '$a bye' ab         #在文件ab中最后一行直接输入"bye"
         [root@localhost ruby]# cat ab
         Hello!
         ruby is me,welcome to my blog.
         end
         bye
    
    删除匹配行
       sed -i '/匹配字符串/d'  filename  (注:若匹配字符串是变量,则需要“”,而不是‘’。记得好像是)
          替换匹配行中的某个字符串
          sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename

    数据 的 搜寻 并 显示

    搜索 /etc/passwd 有 root 关键字的行:nl /etc/passwd | sed '/root/p'
    使用 -n 的时候将只打印包含模板的行:nl /etc/passwd | sed -n '/root/p'

    数据 的 搜寻 并 删除

    删除 /etc/passwd 所有包含 root 的行,其他行输出:nl /etc/passwd | sed  '/root/d'

    数据 的 搜寻 并 执行命令

    搜索 /etc/passwd,找到 root 对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把 bash 替换为 blueshell,再输出这行:nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'

    如果只替换 /etc/passwd 的第一个 bash 关键字为 blueshell,就退出:nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}' 

    数据 的 搜寻 并 替换

    除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似!他有点像这样:sed 's/要被取代的字串/新的字串/g'

    将 IP 前面 的部分予以删除:[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'

    将 IP 后面 的部分予以删除:[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'

    多点编辑

    一条 sed 命令,删除 /etc/passwd 第三行到末尾的数据,并把 bash 替换为 blueshellnl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'

    -e 表示多点编辑
        第一个编辑命令删除 /etc/passwd 第三行到末尾的数据
        第二条命令搜索 bash 替换为 blueshell。

    直接修改文件内容(危险动作)

    sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试! 我们还是使用下载的 regular_express.txt 文件来测试看看吧!

    利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !

    [root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt

    利用 sed 直接在 regular_express.txt 最后一行加入『# This is a test』

    [root@www ~]# sed -i '$a # This is a test' regular_express.txt

    由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增『# This is a test』!

    sed 的『 -i 』选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!

    更多相关内容
  • sed命令是一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作。sed是按行来处理文本内容的。在shell中,使用sed来批量修改文本内容是非常方便的。 sed命令的选项 sed [选项] [动作] 选项与参数...
  • linux sed命令详解

    2017-12-15 10:27:45
    linux sed命令详解
  • Linux Sed命令详解

    2021-01-20 14:53:55
    处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并...
  • linux sed命令详解.docx

    2021-09-26 23:31:31
    linux sed命令详解.docx
  • Linux sed 命令详解

    2021-05-12 16:06:57
    处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。两种形式:1、...

    功能说明:利用script来处理文本文件。 sed可依照script的指令,来处理、编辑文本文件。

    简介:sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。

    两种形式:

    1、sed [options] '{command}' file(s)

    2、sed [options] -f scriptfile file(s)

    方法1:

    sed -i 's/被替换的内容/要替换成的内容/' file

    方法2:

    sed 's/被替换的内容/要替换成的内容/g' file > file.out

    mv file.out file

    参  数:

    a\ 在当前行后面加入一行文本。

    b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。

    c\ 用新的文本改变本行的文本。

    d 从模板块(Pattern space)位置删除行。

    D 删除模板块的第一行。

    i\ 在当前行上面插入文本。

    h 拷贝模板块的内容到内存中的缓冲区。

    H 追加模板块的内容到内存中的缓冲区

    g 获得内存缓冲区的内容,并替代当前模板块中的文本。

    G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。

    l 列表不能打印字符的清单。

    n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。

    N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。

    p 打印模板块的行。

    P(大写) 打印模板块的第一行。

    q 退出Sed。

    r file 从file中读行。

    t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。

    T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。

    w file 写并追加模板块到file末尾。

    W file 写并追加模板块的第一行到file末尾。

    ! 表示后面的命令对所有没有被选定的行发生作用。

    s/re/string 用string替换正则表达式re。

    = 打印当前行号码。

    # 把注释扩展到下一个换行符以前。

    以下的是替换标记

    g表示行内全面替换。

    p表示打印行。

    w表示把行写入一个文件。

    x表示互换模板块中的文本和缓冲区中的文本。

    y表示把一个字符翻译为另外的字符(但是不用于正则表达式)

    选项:

    -e进行多项编辑,即对输入行应用多条sed命令时使用

    -n取消默认的输出

    -f指定sed脚本的文件名

    元字符集:

    ^行首定位符,/^my/ 匹配所有以my开头的行

    $行尾定位符,/my$/ 匹配所有以my结尾的行

    .匹配除换行符以外的单个字符,/m..y/ 匹配包含字母m,后跟两个任意字符,再跟字母y的行

    *匹配零个或多个前导字符,/my*/ 匹配包含字母m,后跟零个或多个y字母的行

    []匹配指定字符组内的任一字符,/[Mm]y/ 匹配包含My或my的行

    [^]匹配不在指定字符组内的任一字符,/[^Mm]y/ 匹配包含y,但y之前的那个字符不是M或m的行

    \(..\)保存已匹配的字符,1,20s/\(you\)self/\1r/ 标记元字符之间的模式,并将其保存为标签1,之后可以使用\1来引用它。最多可以定义9个标签,从左边开始编号,最左边的是第一个。此例中,对第1到第20行进行处理,you被保存为标签1,如果发现youself,则替换为your。

    &保存查找串以便在替换串中引用,s/my/**&**/ 符号&代表查找串。my将被替换为**my**

    \

    \>词尾定位符,/my\>/ 匹配包含以my结尾的单词的行

    删除:

    sed '2d' example-----删除example文件的第二行。

    sed '2,$d' example-----删除example文件的第二行到末尾所有行。

    sed -e '1,3d' example-----(删除第一到第三行)

    sed '$d' example-----删除example文件的最后一行。

    sed '/test/'d example-----删除example文件所有包含test的行。sed -e '/#/d' example-----(删除含有'#'号的行)

    删除行首空格

    sed ’s/^[ ]*//g’ filename

    sed ‘s/^ *//g’ filename

    sed ‘s/^[[:space:]]*//g’ filename

    替换:

    sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。

    sed -n 's/^test/mytest/p' example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。

    sed 's/^192.168.0.1/&localhost/' example-----&符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost。

    sed -n 's/\(love\)able/\1rs/p' example-----love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。

    sed 's#10#100#g' example-----不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。

    sed -e '1c\#!/bin/more' example-----(把第一行替换成#!/bin/more)

    sed -e 's/word1/& word2/' example-----(将每一行的word1单词替换成s参数最多与两个位置参数相结合,函数参数s中有两个特殊的符号:& : 代表pattern

    插入:

    行后和行前添加新行

    行后:sed ‘s/pattern/&\n/g’ filename

    行前:sed ‘s/pattern/\n&/g’ filename

    &代表pattern

    在第一行前插入文本

    sed -i ’1 i\插入字符串’ filename

    在最后一行插入

    sed -i ‘$ a\插入字符串’ filename

    在匹配行前插入

    sed -i ‘/pattern/ i “插入字符串”‘ filename

    在匹配行后插入

    sed -i ‘/pattern/ a “插入字符串”‘ filename0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • Linux篇】sed命令详解

    千次阅读 2022-05-10 22:25:25
    文章目录sed命令详解一、基本语法二、实操案例内部命令选项说明命令选项说明标志三、sed小技巧 sed命令详解 sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,...

    sed命令详解

    sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

    在这里插入图片描述

    一、基本语法

    sed [options] '{command}[flags]' [filename]    
    # 中括号内容必有 大括号内容可有可无
    sed  # 执行命令
    [options]  # 命令选项
    {command}[flags]    # sed内部选项和参数
    [filename]     # 文件
    
    命令选项
    -e script 将脚本中指定的命令添加到处理输入时执行的命令中,  多条件,一行中要有多个操作
    -f script 将文件中指定的命令添加到处理输入时执行的命令中
    -n        抑制自动输出
    -i        编辑文件内容
    -i.bak    修改时同时创建.bak备份文件。
    -r        使用扩展的正则表达式
    !         取反 (跟在模式条件后与shell有所区别)
    
    sed常用内部命令
    a   在匹配后面添加
    i   在匹配前面添加
    p   打印
    d   删除
    s   查找替换
    c   更改
    y   转换   N D P 
    
    flags
    数字             表示新文本替换的模式
    g:             表示用新文本替换现有文本的全部实例
    p:             表示打印原始的内容
    w filename:     将替换的结果写入文件
    

    二、实操案例

    在这里插入图片描述

    # 新加一行
    sed -i ' /<\/java-config>/i \ <jvm-options>-Dlog4j2.formatMsgNoLookups=true</jvm-options>' ${BES_HOME}/conf/server.config
    
    # 判断环境变量(容器化环境)中是否有参数,有则替换
    if [ -n "$jvmOptionsXmx" ];then
    	sed -i "$(sed -n '/-Xmx/='${BES_HOME}/conf/server.config)""c\	$jvmOptionsXmx" ${BES_ HOME}/conf/server.config
    fi
    
    if [ -n "$jvmOptionsXms" ];then
    	sed -i "$(sed -n '/-Xms/='${BES_HOME}/conf/server.config)""c\	$jvmOptionsXms" ${BES_HOME}/conf/server.config
    fi
    

    在这里插入图片描述

    这个案例是我们项目中实际用到的,效果就是配置JVM参数。具体学习看下面的即可。

    准备数据

    [root@jiangnan ~]# vim sed.txt
    [root@jiangnan ~]# cat sed.txt
    1 the quick brown fox jumps over the lazy dog.
    2 the quick brown fox jumps over the lazy dog.
    3 the quick brown fox jumps over the lazy dog.
    4 the quick brown fox jumps over the lazy dog.
    5 the quick brown fox jumps over the lazy dog.
    

    内部命令选项说明

    文件内容增加操作,将数据追加到某个位置之后,使用命令 a 。

    1. 在指定行后面追加内容

    在第二到四行每行后新开一行追加数据: append data “haha”

    [root@jiangnan data]# sed '2,4a\append data "haha"' sed.txt 
    1 the quick brown fox jumps over the lazy dog.
    2 the quick brown fox jumps over the lazy dog.
    append data "haha"
    3 the quick brown fox jumps over the lazy dog.
    append data "haha"
    4 the quick brown fox jumps over the lazy dog.
    append data "haha"
    5 the quick brown fox jumps over the lazy dog.
    [root@jiangnan data]# 
    

    说明:a表示在匹配的行后面新开一行新增内容。2,4a表示第2到4行,如果不写数字,表示所有行。

    1. 匹配字符串追加

    找到包含"3 the"的行,在其后新开一行追加内容: append data “haha”

    [root@jiangnan data]# sed '/3 the/a\append data "haha"' sed.txt 
    1 the quick brown fox jumps over the lazy dog.
    2 the quick brown fox jumps over the lazy dog.
    3 the quick brown fox jumps over the lazy dog.
    append data "haha"
    4 the quick brown fox jumps over the lazy dog.
    5 the quick brown fox jumps over the lazy dog.
    [root@jiangnan data]# 
    

    这里注意:/要匹配的字符串/

    这种方法比较常用,匹配指定的字符串然后进行增加,比如XML文件等。

    文件内容增加操作,将数据插入到某个位置之前,使用命令 i 。

    1. 匹配字符串插入

    找到包含"3 the"的行,在其前新开一行插入内容: insert data “haha”

    [root@jiangnan data]# sed '/3 the/i\append data "haha"' sed.txt 
    1 the quick brown fox jumps over the lazy dog.
    2 the quick brown fox jumps over the lazy dog.
    append data "haha"
    3 the quick brown fox jumps over the lazy dog.
    4 the quick brown fox jumps over the lazy dog.
    5 the quick brown fox jumps over the lazy dog.
    [root@jiangnan data]# 
    

    这里注意:/要匹配的字符串/

    使用方法同a类似。

    文件内容修改操作—替换,将一行中匹配的内容替换为新的数据,使用命令s。

    1. 在指定行后面追加内容

    将sed.txt 中第二到第四行的dog替换为cat

    [root@jiangnan data]# sed '2,4s/dog/cat/' sed.txt 
    1 the quick brown fox jumps over the lazy dog.
    2 the quick brown fox jumps over the lazy cat.
    3 the quick brown fox jumps over the lazy cat.
    4 the quick brown fox jumps over the lazy cat.
    5 the quick brown fox jumps over the lazy dog.
    [root@jiangnan data]# 
    
    1. 匹配字符串所在行指定字符的替换

    将包含字符串"3 the"的行中的dog替换为cat

    [root@jiangnan data]# sed '/3 the/s/dog/cat/' sed.txt 
    1 the quick brown fox jumps over the lazy dog.
    2 the quick brown fox jumps over the lazy dog.
    3 the quick brown fox jumps over the lazy cat.
    4 the quick brown fox jumps over the lazy dog.
    5 the quick brown fox jumps over the lazy dog.
    [root@jiangnan data]# 
    

    这里注意:/匹配字符串所在的行/s/指定匹配字符串/要替换的字符串/

    文件内容修改操作—更改,将一行中匹配的内容替换为新的数据,使用命令c。

    1. 匹配行整行的替换

    将sed.txt 文件中的第二、三、四行的内容更改为:change data “haha”

    [root@jiangnan data]# sed '2,4c\change data haha' sed.txt 
    1 the quick brown fox jumps over the lazy dog.
    change data haha
    5 the quick brown fox jumps over the lazy dog.
    [root@jiangnan data]# 
    
    1. 匹配字符串所在行整行的替换

    将sed.txt文件中包含"3 the"的行内容更改为: change data “haha”

    [root@jiangnan data]# sed '/3 the/c\change data haha' sed.txt 
    1 the quick brown fox jumps over the lazy dog.
    2 the quick brown fox jumps over the lazy dog.
    change data haha
    4 the quick brown fox jumps over the lazy dog.
    5 the quick brown fox jumps over the lazy dog.
    [root@jiangnan data]# 
    

    文件内容修改操作—字符转换,将一行中匹配的内容替换为新的数据,使用命令y。

    1. 将sed.txt中的a b c字符转换为对应的 A B C字符
    [root@jiangnan data]# sed 'y/abc/ABC/' sed.txt 
    1 the quiCk Brown fox jumps over the lAzy dog.
    2 the quiCk Brown fox jumps over the lAzy dog.
    3 the quiCk Brown fox jumps over the lAzy dog.
    4 the quiCk Brown fox jumps over the lAzy dog.
    5 the quiCk Brown fox jumps over the lAzy dog.
    [root@jiangnan data]# 
    

    文件内容删除,将文件中的指定数据删除,使用命令d。

    1. 删除文件sed.txt 第三到第四行的数据
    [root@jiangnan data]# sed '3,4d' sed.txt 
    1 the quick brown fox jumps over the lazy dog.
    2 the quick brown fox jumps over the lazy dog.
    5 the quick brown fox jumps over the lazy dog.
    [root@jiangnan data]# 
    

    文件内容查看,将文件内容输出到屏幕,使用命令p。

    1. 打印sed.txt的内容
    [root@jiangnan data]# sed 'p' sed.txt 
    1 the quick brown fox jumps over the lazy dog.
    1 the quick brown fox jumps over the lazy dog.
    2 the quick brown fox jumps over the lazy dog.
    2 the quick brown fox jumps over the lazy dog.
    3 the quick brown fox jumps over the lazy dog.
    3 the quick brown fox jumps over the lazy dog.
    4 the quick brown fox jumps over the lazy dog.
    4 the quick brown fox jumps over the lazy dog.
    5 the quick brown fox jumps over the lazy dog.
    5 the quick brown fox jumps over the lazy dog.
    [root@jiangnan data]# 
    
    1. 打印sed.txt文件包含字符串"3 the"的行
    [root@jiangnan data]# sed '/3 the/p' sed.txt 
    1 the quick brown fox jumps over the lazy dog.
    2 the quick brown fox jumps over the lazy dog.
    3 the quick brown fox jumps over the lazy dog.
    3 the quick brown fox jumps over the lazy dog.
    4 the quick brown fox jumps over the lazy dog.
    5 the quick brown fox jumps over the lazy dog.
    [root@jiangnan data]# 
    

    现象:可以看得出,打印内容是重复的行,原因是打印了指定文件内容一次,又将读入缓存的所有数据打印了一次,所以会看到这样的效果, 如果不想看到这样的结果,可以加命令选项-n抑制内存输出即可。

    [root@jiangnan data]# sed -n '/3 the/p' sed.txt 
    3 the quick brown fox jumps over the lazy dog.
    [root@jiangnan data]# 
    

    命令选项说明

    在命令行中使用多个命令 -e

    1. 将brown替换为green dog替换为cat
    [root@jiangnan data]# sed -e 's/brown/green/;s/dog/cat/' sed.txt 
    1 the quick green fox jumps over the lazy cat.
    2 the quick green fox jumps over the lazy cat.
    3 the quick green fox jumps over the lazy cat.
    4 the quick green fox jumps over the lazy cat.
    5 the quick green fox jumps over the lazy cat.
    [root@jiangnan data]# 
    

    从文件读取编辑器命令 -f 适用于日常重复执行的场景

    1)将命令写入文件
    [root@jiangnan data]# vim abc.txt
    [root@jiangnan data]# cat abc.txt
    s/brown/green/
    s/dog/cat/
    s/fox/elephant/
    [root@jiangnan data]# 
    
    2)使用-f命令选项调用命令文件
    [root@jiangnan ~]# sed -f abc.txt sed.txt 
    1 the quick green elephant jumps over the lazy cat.
    2 the quick green elephant jumps over the lazy cat.
    3 the quick green elephant jumps over the lazy cat.
    4 the quick green elephant jumps over the lazy cat.
    5 the quick green elephant jumps over the lazy cat.
    [root@jiangnan data]# 
    

    抑制内存输出 -n

    1. 打印sed.txt文件的第二行到最后一行内容 $最后的意思
    [root@jiangnan data]# sed -n '2,$p' sed.txt 
    2 the quick brown fox jumps over the lazy dog.
    3 the quick brown fox jumps over the lazy dog.
    4 the quick brown fox jumps over the lazy dog.
    5 the quick brown fox jumps over the lazy dog.
    [root@jiangnan data]# 
    

    使用正则表达式 -r

    1. 打印sed.txt中以字符串"3 the"开头的行内容
    [root@jiangnan data]# sed -n -r '/^(3 the)/p' sed.txt 
    3 the quick brown fox jumps over the lazy dog.
    [root@jiangnan data]# 
    

    在这里插入图片描述

    说明:在正则表达式中如果出现特殊字符(^$.*/[]),需要以前导 “\” 号做转义

    注意:做完了上面的案例,但是我们发现源文件并没有任何改变,原因就是sed操作的是缓存区里的内容,对我们的源文件没有做改变。如果需要修改文件内容可以直接使用-i命令选项,-i命令选项提供了备份功能,比如参数使用-i.bak,那么在修改源文件的同时会先备份一个以.bak结尾的源文件,然后再进行修改操作。

    [root@jiangnan data]# sed -i.bak 's/brown/green/' sed.txt 
    [root@jiangnan data]# cat sed.txt
    1 the quick green fox jumps over the lazy dog.
    2 the quick green fox jumps over the lazy dog.
    3 the quick green fox jumps over the lazy dog.
    4 the quick green fox jumps over the lazy dog.
    5 the quick green fox jumps over the lazy dog.
    [root@jiangnan data]# cat sed.txt.bak 
    1 the quick brown fox jumps over the lazy dog.
    2 the quick brown fox jumps over the lazy dog.
    3 the quick brown fox jumps over the lazy dog.
    4 the quick brown fox jumps over the lazy dog.
    5 the quick brown fox jumps over the lazy dog.
    [root@jiangnan data]# 
    

    标志

    准备数据

    [root@jiangnan data]# vi sed2.txt
    [root@jiangnan data]# cat sed2.txt 
    1 the quick brown fox jumps over the lazy dog . dog
    2 the quick brown fox jumps over the lazy dog . dog
    3 the quick brown fox jumps over the lazy dog . dog
    4 the quick brown fox jumps over the lazy dog . dog
    5 the quick brown fox jumps over the lazy dog . dog
    [root@jiangnan data]# 
    

    数字标志:此标志是一个非零正数,默认情况下,执行替换的时候,如果一行中有多个符合的字符串,如果没有标志位定义,那么只会替换第一个字符串,其他的就被忽略掉了,为了能精确替换,可以使用数字位做定义。

    1. 替换一行中的第二处dog为cat
    [root@jiangnan data]# sed 's/dog/cat/2' sed2.txt 
    1 the quick brown fox jumps over the lazy dog . cat
    2 the quick brown fox jumps over the lazy dog . cat
    3 the quick brown fox jumps over the lazy dog . cat
    4 the quick brown fox jumps over the lazy dog . cat
    5 the quick brown fox jumps over the lazy dog . cat
    [root@jiangnan data]# sed 's/dog/cat/' sed2.txt 
    1 the quick brown fox jumps over the lazy cat . dog
    2 the quick brown fox jumps over the lazy cat . dog
    3 the quick brown fox jumps over the lazy cat . dog
    4 the quick brown fox jumps over the lazy cat . dog
    5 the quick brown fox jumps over the lazy cat . dog
    [root@jiangnan data]# 
    

    对比有标志和没有标志的区别

    g标志:将一行中的所有符合的字符串全部执行替换

    1. 将包含3 the所在行中的dog替换为cat
    [root@jiangnan data]# sed '/3 the/s/dog/cat/g' sed2.txt 
    1 the quick brown fox jumps over the lazy dog . dog
    2 the quick brown fox jumps over the lazy dog . dog
    3 the quick brown fox jumps over the lazy cat . cat
    4 the quick brown fox jumps over the lazy dog . dog
    5 the quick brown fox jumps over the lazy dog . dog
    [root@jiangnan data]# 
    

    ‘g’表示global,全部替换

    p标志:打印文本内容,类似于-p命令选项

    [root@jiangnan data]# sed '3s/dog/cat/p' sed2.txt 
    1 the quick brown fox jumps over the lazy dog . dog
    2 the quick brown fox jumps over the lazy dog . dog
    3 the quick brown fox jumps over the lazy cat . dog
    3 the quick brown fox jumps over the lazy cat . dog
    4 the quick brown fox jumps over the lazy dog . dog
    5 the quick brown fox jumps over the lazy dog . dog
    [root@jiangnan data]# 
    

    w filename标志:将修改的内容存入filename文件中

    [root@jiangnan data]# sed '3s/dog/cat/w sed3.txt' sed2.txt 
    1 the quick brown fox jumps over the lazy dog . dog
    2 the quick brown fox jumps over the lazy dog . dog
    3 the quick brown fox jumps over the lazy cat . dog
    4 the quick brown fox jumps over the lazy dog . dog
    5 the quick brown fox jumps over the lazy dog . dog
    [root@jiangnan data]# cat sed3.txt 
    3 the quick brown fox jumps over the lazy cat . dog
    [root@jiangnan data]# 
    

    可以看出,将修改的第三行内容存在了sed3.txt文件中

    三、sed小技巧

    统计data2有多少行
    [root@jiangnan ~]# sed -n '$=' data2
    5
    
    打印data2内容时加上行号
    [root@jiangnan ~]# sed  '=' data2
    1
    1 the quick brown fox jumps over the lazy dog . dog
    2
    2 the quick brown fox jumps over the lazy dog . dog
    3
    3 the quick brown fox jumps over the lazy dog . dog
    4
    4 the quick brown fox jumps over the lazy dog . dog
    5
    5 the quick brown fox jumps over the lazy dog . dog
    
    输出包含the的所在行的行号(= 用来输出行号)
    [root@jiangnan ~]# sed -n '/the/=' test.txt 
    
    输出以PI开头的行
    [root@jiangnan ~]# sed -n '/^PI/p' test.txt 
    
    输出以数字结尾的行
    [root@jiangnan ~]# sed -n '/[0-9]$/p' test.txt 
    
    输出包含单词wood的行 \< ,\>表示单词边界
    [root@jiangnan ~]# sed -n '/\<wood\>/p' test.txt 
    a wood cross!
    
    每行开始添加#字符	
    [root@jiangnan ~]# sed 's/^/#/' test.txt 
    
    在包含the的每行行首添加#字符
    [root@jiangnan ~]# sed '/the/s/^/#/' test.txt 
    
    在每行末尾添加EOF字符
    [root@jiangnan ~]# sed 's/$/EOF/' test.txt 
    
    将3-5行所有的the替换为THE	  	
    [root@jiangnan ~]# sed '3,5s/the/THE/g' test.txt 
    
    将包含the的行中的o替换为O	
    [root@jiangnan ~]# sed '/the/s/o/O/g' test.txt 
    
    迁移符合条件的文本
    H 复制到剪贴板;
    g,G 将剪贴板中的数据覆盖/追加到指定行;
    w保存为文件;
    r读取指定文件;
    a 追加指定内容
    
    将包含the的行迁移到行尾(;用于多个操作)
    
    H复制到剪贴板---d删除---$G追加到行尾
    [root@jiangnan ~]# sed '/the/{H;d};$G' test.txt 
    
    将1-5行迁移到17行后
    [root@jiangnan ~]# sed '1,5{H;d};17G' test.txt 
    
    将包含the的行另存为新文件
    [root@jiangnan ~]# sed '/the/w out.file' test.txt 
    
    [root@jiangnan ~]# ls
    
    anaconda-ks.cfg  out.file  test.txt  :wq
    
    [root@jiangnan ~]# cat out.file 
    
    在包含the每行后添加文件hostname内容
    [root@jiangnan ~]# sed '/the/r /etc/hostname' test.txt 
    
    在第3行后插入新行,内容为New
    [root@jiangnan ~]# sed '3aNew' test.txt 
    
    在包含the的每行后插入新行		
    [root@jiangnan ~]# sed '/the/aNew' test.txt 
    
    在第3行后插入多行(\n 换行符)
    [root@jiangnan ~]# sed '3aNew1\nNew2' test.txt 
    ngnan ~]# sed '1,5{H;d};17G' test.txt 
    
    将包含the的行另存为新文件
    [root@jiangnan ~]# sed '/the/w out.file' test.txt 
    
    [root@jiangnan ~]# ls
    
    anaconda-ks.cfg  out.file  test.txt  :wq
    
    [root@jiangnan ~]# cat out.file 
    
    在包含the每行后添加文件hostname内容
    [root@jiangnan ~]# sed '/the/r /etc/hostname' test.txt 
    
    在第3行后插入新行,内容为New
    [root@jiangnan ~]# sed '3aNew' test.txt 
    
    在包含the的每行后插入新行		
    [root@jiangnan ~]# sed '/the/aNew' test.txt 
    
    在第3行后插入多行(\n 换行符)
    [root@jiangnan ~]# sed '3aNew1\nNew2' test.txt 
    

    微信公众号先已开通,搜索 “江小南和他的小伙伴们” 就能找到我哦,各位小伙伴们可以关注一下,文章会进行同步更新,方便查看哦。

    展开全文
  • Linux文件处理sed命令详解教程Linux sed命令使用Linux sed 命令处理时,把当前处理的行存储在临时缓冲区中,称为 ”模式空间”( oattern space),接看用 sed 命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往...

    Linux文件处理sed命令详解教程

    Linux sed命令使用

    Linux sed 命令处理时,把当前处理的行存储在临时缓冲区中,称为 ”模式空间”( oattern space),接看用 sed 命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。

    接着理下一行,这样不断重复,直到文件末。文件内容没有改改变,除非使用了写入的命令,将内容更新。

    定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。

    注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据。

    Linux sed命令详解

    功能

    对文本进行过滤与替换。

    语法

    sed [options] [cmd] [filename]

    参数

    参数

    描述

    options

    sed 命令使用的参数。

    cmd

    脚本指令。

    filename

    要处理的文件,如果没有指定,从标准输入读取。

    sed命令常用参数

    参数

    描述

    –version

    显示 sed 版本。

    –help

    显示帮助文档。

    -n,–quit,–silent

    静默输出,默认情况下,sed 程序在所有的脚本指令执行完毕后,将自动打印模式空间中的内容,该选项可以屏蔽自动打印。

    -e script

    允许多个脚本指令被执行。

    -f script-file

    从文件中读取脚本指令,对编写自动脚本程序很实用。

    -i,–in-place

    慎用,该选项将直接修改源文件。

    -l,N

    该选项指令l指令可以输出的行长度,l指令为输出非打印字符。

    –posix

    禁用 GNU sed 扩展功能。

    -r

    在脚本指令中使用扩展正则表达式。

    -s,–separate

    默认情况下,sed 将把输入的多个文件名作为一个长的连续的输入流,而 GNU sed 则允许把它们当作单独的文件。

    -u,–unbuffered

    最低限度的缓存输入和输出。

    Linux sed命令功能详解

    命令

    描述

    a\

    在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用 “\” 续行。

    c\

    用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用 “\” 续行。

    i\

    在当前行之前插入文本。多行时除最后一行外,每行末尾需用 “\” 续行。

    d

    删除行。

    h

    把模式空间里的内容复制到暂存缓冲区。

    H

    把模式空间里的内容追加到暂存缓冲区。

    g

    把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容。

    G

    把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面。

    l

    列出非打印字符。

    p

    打印行。

    n

    读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理。

    q

    结束或退出 sed。

    r

    从文件中读取输入行。

    !

    对所选行以外的所有行应用命令。

    s

    用一个字符串替换另一个。

    g

    在行内进行全局替换。

    w

    将所选的行写入文件。

    x

    交换暂存缓冲区与模式空间的内容。

    y

    将字符替换为另一字符(不能对正则表达式使用y命令)。

    Linux sed命令常用实例

    实例

    实例

    描述

    sed -n ‘3p’ file

    打印文件 file 的第三行内容

    sed -n ‘n1,n2p’ file

    打印文件 file 的第 n1 行到 n2 行的内容

    sed -n ‘/str1/,/str2/p’ file

    显示文件 file 中包含 str1 的行到包含 str2 的行之间的行

    sed -n ‘/str/p’ file

    显示文件 file 中匹配字符串 str 的行

    sed ‘s/str1/str2/g’ file

    将文件 file 中所有的 str1 替换为 str2,不写入文件

    sed -i ‘s/str1/str2/g’ file

    将文件 file 中所有的 str1 替换为 str2,并写入文件

    sed -e ‘1i str1’ -e ‘$a str2’ file

    在文件 file 的第一行添加 str1,文件 file 结尾添加 str2

    sed ‘1,4i str’ file

    在文件第一行和第四行的每行下面添加 str

    sed ‘s/world/hello_&/g’ file

    & 符号在 sed 命令中代表上次匹配的结果,这里表示将 world 替换为 hello_word

    sed ‘3,9d’ file

    删除文件的第三行到第九行

    sed ‘/str1/,/str2/d’ file

    删除 file 中包含 str1 到包含 str2 的行

    sed ‘5,10 s/str1/str2/g’ file

    将文件的第五行到第十行的所有的 str1 替换为 str2

    sed -n -e ‘3,6p’ -e ‘s/str1/str2/g’ file

    打印 3 到 6 行的内容,并匹配 str1 替换为 str2

    打印文件的第N行

    语法

    sed -n '3p' file

    案例

    我们使用 sed 命令,查看文件 /etc/passwd 的第五行内容,具体命令如下:

    sed -n '5p' /etc/passwd

    运行后,终端输出如下:

    da0b0c5ea3fa73a77b0b6ee12f68c622.png

    我们看到,我们使用了 sed 命令,打印了文件的第五行的内容。

    打印文件的第N1行到第N2行

    语法

    sed -n 'n1,n2p' file

    案例

    我们使用 sed 命令,查看文件 /etc/passwd 的第 5 行到第 8 行的内容,具体命令如下:

    sed -n '5,8p' /etc/passwd

    运行后,终端输出如下:

    f2b9a2404e35c74e48e371226200d8f4.png

    我们看到,我们使用了 sed 命令,打印了文件的第五行到第八行的内容。

    打印文件包含字符串的行

    语法

    sed -n '/str1/,/str2/p' file

    案例

    我们使用 sed 命令,查看文件 /etc/passwd 中包含指定字符串的行到指定字符串行的内容,具体命令如下:

    sed -n '/tcpdump/,/adm/p' /etc/passwd

    运行后,终端输出如下:

    0b6735b09844cb24e0db39d06fce3339.png

    我们看到,我们使用了 sed 命令,打印了文件中包含 tcpdump 和包含 adm 的行之间的内容。

    打印文件中匹配字符串的行

    语法

    sed -n '/str/p' file

    案例

    我们使用 sed 命令,查看文件 /etc/passwd 中包含指定字符串的内容,具体命令如下:

    sed -n '/root/p' /etc/passwd

    运行后,终端输出如下:

    8a21ca86fa28a7047ac313e247474281.png

    我们看到,我们使用了 sed 命令,打印了文件中包含 root 的行。

    替换字符串

    语法

    sed 's/str1/str2/g' file

    案例

    我们使用 sed 命令,查看文件 /etc/passwd 中的内容,并将 str1 替换为 str2,具体命令如下:

    sed 's/root/super/g' /etc/passwd

    运行后,终端输出如下:

    1679e1c90cfb064feb4d213ea811e7bc.png

    我们看到,我们使用了 sed 命令,将文件中所有的 root 替换为了 super。

    删除行

    语法

    sed '3,9d' file

    案例

    我们使用 sed 命令,删除文件 /etc/passwd 的第三行到第二十七行,具体命令如下:

    sed '3,27d' /etc/passwd

    运行后,终端输出如下:

    31776f98c776e8a260e68523a26c439f.png

    我们看到,我们使用了 sed 命令,删除了文件的第三行到第二十七行。

    Linux文件处理sed命令详解总结

    Linux 中的 sed 是一种流编编器,用来对文本进行过滤与替换操作,同时,sed 命令能够完美的配合正则表达式使用。

    Linux sed 命令处理时,把当前处理的行存储在临时缓冲区中,称为 ”模式空间”( oattern space),接看用 sed 命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。

    注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据。

    展开全文
  • Linux sed命令详解

    2021-05-11 14:27:33
    处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”( oattern space),接看用sed命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。接着理下一行,这样不断重复,直到文件末。文件内容没有...
  • Linuxsed命令详解大全

    万次阅读 多人点赞 2021-04-23 18:36:10
    Linuxsed命令详解大全
  • Linuxsed命令详解

    2022-07-01 16:25:03
    sed并不是直接对源文件进行处理,而是每次从文件中读取一行,复制出来一份放在自己的模式空间,如果能匹配到pattern,则对结果进行处理,即交给保持空间,如果不能匹配,则不进行处理。
  • Linux sed 命令用法详解

    2021-01-09 19:27:22
    Linux sed 命令 Linux sed 命令是利用脚本来处理文本文件。 sed 可依照脚本的指令来处理、编辑文本文件。 Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。 语法 sed [-hnV][-e][-f]...
  • Linux sed命令用法详解

    2021-05-10 10:42:34
    提到 sed 命令,就不得提到 Sed 工具。Sed(stream editor)是一种非交互式的流编辑器,通过多种转换修改流经它的文本。首先,Sed 通过文件或管道读取文件的内容,在默认情况下,Sed 并不会修改原文件的本身,而是将...
  • Linux Sed命令详解(文本处理工具 - 匹配,替换,添加等),优化投产步骤,使用命令批量修改抽数脚本代替逐个vim
  • Linux - sed命令详解

    2022-07-10 21:43:18
    05.sed常用编辑命令 p命令: 不连续的输出多行, ;是命令连接符 连续输出多行 1~2p,从第一行开始,步长为2,每次间隔2行输出 c命令 1.修改主机名/etc/hostname里的内容为你自己的名字

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,053
精华内容 5,221
关键字:

linuxsed命令详解