精华内容
下载资源
问答
  • shell中sed命令的用法

    千次阅读 2018-10-28 11:35:43
    shell中sed命令的用法 no_shutdown_ 0人评论 9264人阅读 2018-01-29 19:02:51 sed (stream editor)流编辑器也是linux的一条命令,在shell中经常需要用到的非交互式修改文件内容的命令。sed处理文本是按行...

    

    shell中sed命令的用法

    no_shutdown_ 0人评论 9264人阅读 2018-01-29 19:02:51

    sed (stream editor)流编辑器也是linux中的一条命令,在shell中经常需要用到的非交互式修改文件内容的命令。sed处理文本是按行处理,也就是读一行处理一行。
    sed的命令基本格式是:
    sed 选项 '编辑指令' 文件路径
    也可以通过管道(|)传输参数给sed处理 前置命令 | sed 选项 '编辑指令'


    sed的常用参数有:
    -n 屏蔽默认输出;如果不加-n选项会全部输出文本满足条件的行再重复输出
    -r 如果使用扩展正则,则需要添加-r选项,默认不支持扩展正则,只支持标准正则
    -i 直接修改源文件;不加-i只会在屏幕临时输出不会修改源文件,一般测试过命令无误才会在脚本中使用-i选项
    sed的编辑指令:

    p 输出

    命令完整示例说明
    psed -n 'p' 1.txt输出1.txt的所有行
    2psed -n '2p' 1.txt输出1.txt的第二行
    2,5psed -n '2,5p' 1.txt输出1.txt的第二行到第五行
    2,+5psed -n '2,+5p' 1.txt输出1.txt的第二行和第二行以后的5行
    1~2psed -n '1~2p' 1.txt输出第一行,每隔两行输出一行,也就是输出奇数行
    2~2psed -n '1~2p' 1.txt输出第二行,每隔两行输出一行,也就是输出偶数数行
    /正则/psed -n '/^[0-9]/p' 1.txt输出1.txt以数字开头的行
    $=sed -n '$=' 1.txt输出1.txt的行数

    d 删除

    命令完整示例说明
    2dsed '2d' 1.txt删除1.txt的第二行
    2,5dsed '2,5d' 1.txt删除1.txt的第二行到第五行
    2,+5dsed '2,+5d' 1.txt删除1.txt的第二行和第二行以后的5行
    $dsed '$d' 1.txt删除1.txt的最后一行行
    /正则/sed '/^[0-9]/d' 1.txt删除以数字开始的行
    sed '/^[0-9]/!d' 1.txt删除不是以数字开头的行
    ^$sed '^$' 1.txt删除1.txt的空行

    s 替换

    命令完整示例说明
    s/old/new/sed 's/old/new/' 1.txt删除1.txt中每行的第一个old都替换成new
    s/old/new/2sed 's/old/new/' 1.txt删除1.txt中每行的第二个old都替换成new
    s/old/new/gsed 's/old/new/g' 1.txt删除1.txt中每行的每一个old都替换成new
    s/old//sed 's/old//' 1.txt删除1.txt中每行的第一个old都替换成空也就是把old删除
    s/old/&s/sed 's/old/&s/' 1.txt删除1.txt中每行的第一个old都替换成olds &代表前面查找的字符串
    4,7s/^/#/sed '4,7s/^/#/' 1.txt删除1.txt中4-7行开头加上# 也就是批量添加注释
    4,7s/^#an/an/sed '4,7s/^#an/an/' 1.txt删除1.txt中4-7行以#an开头的行去掉#

    替换中s///可以用其他三个相同的符号代替如s### s&&& s999 都可以 这样的符号在替换路径的时候经常用到

    i/a/c插入

    命令完整示例说明
    行号 ised '2i123' 1.txt在1.txt的第二行前面插入123
    正则 ised '/^[0-9]/i123' 1.txt在1.txt中所有数字开头的行前面插入123
    a在行后插入命令格式和i相同
    c替换该行命令格式和i相同

    sed高级应用

    命令完整示例说明
    行号rsed -i '2r 2.txt' 1.txt在1.txt中第二行后面插入2.txt的内容
    行号,行号rsed -i '2,5r 2.txt' 1.txt在1.txt中第二行到第五行每行后面插入一遍2.txt的内容
    /正则/rsed -i '/^[0-9]/r 2.txt' 1.txt在1.txt中以数字开头的行后每行面插入一遍2.txt的内容
    wsed '2w 3.txt' 1.txt在1.txt中第二行导出为3.txt的内容
    wsed '2,5w 3.txt' 1.txt在1.txt中第二行到第五行导出3.txt的内容
    /正则/rsed -i '/^[0-9]/w 2.txt' 1.txt在1.txt中以数字开头的行导出为3.txt的内容
    展开全文
  • shell中sed命令卡死的问题 在运行shell文件时,在运行到sed命令时卡住不会动 我的原因:我在\后面加了空格和注释 sed -e "s|BASEDIR|$BASEDIR|g"\ #文件地址 -e "s|abc|$abc|g"\ 删掉注释后正常运行 sed -e "s|...

    shell中sed命令卡死的问题

    在运行shell文件时,在运行到sed命令时卡住不会动

    我的原因:我在\后面加了空格和注释

    sed -e "s|BASEDIR|$BASEDIR|g"\           #文件地址
                -e "s|abc|$abc|g"\
    

    删掉注释后正常运行

    sed -e "s|BASEDIR|$BASEDIR|g"\
                -e "s|abc|$abc|g"\
    
    展开全文
  • shell中sed命令-N选项的理解

    千次阅读 2016-12-15 22:33:17
    shell中sed命令-N选项的理解最近用到shell中sed命令,当时对于-N选项的用法很疑惑,后经过思索终于弄明白了,写在这里记录一下。

    shell中sed命令-N选项的理解

    最近用到shell中的sed命令,当时对于-N选项的用法很疑惑,后经过思索终于弄明白了,写在这里记录一下。

    • sed命令的版本
    • -N选项用法示例
    • 原理分析

    注意:熟悉sed的s替换命令;熟悉换行符\n;系统环境 ubuntu 14.04 lts。

    sed命令的版本

    使用sed - -version来查看当前sed命令的版本,我这里使用的版本如下:

    sed (GNU sed) 4.2.2
    Copyright (C) 2012 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    

    -N选项用法示例

    data.txt文件,包含内容如下(数字和冒号为行号,请忽略):

    1: next next next next time hello
    2: word next next next next
    3: next hello word next next
    4: next next next hello word next
    5: next next next next next hello
    6: word next next next.
    

    sed_n.sh文件,包含内容如下:

    #!/bin/bash
    
    sed '{
        s/hello word/hello shell/
        N
        s/hello\nword/hello\nshell/
        s/hello word/hello shell/
    }' data3.txt

    我们的目的是要将data.txt文件中的hello word替换为hello shell。
    执行./sed_n.sh文件的结果如下:

    next next next next time hello
    shell next next next next
    next hello shell next next
    next next next hello shell next
    next next next next next hello
    shell next next next.
    

    可以看见已经成功的将hello word替换为了hello shell。


    原理分析

    sed命令内部有一个缓冲区,保存着当前读取的内容,每次只会读取一行内容。同时内部还维护一个指针,指向当前读取的行数。

    最初的时候缓冲区为空,同时指针指向0行,即没有执向具体的行数。

    首先sed命令会读取第一行的内容“next next next next time hello”,此时指针指向第一行。接着会用第一条命令 “s/hello word/hello shell/” 来进行处理,发现没有匹配的,那么就开始执行第二条命令 “N”,这条命令会将第二行的内容“word next next next next”读到与第一行内容相同的缓冲区并追加在后面,同时指针指向第二行。接着用第三条命令“s/hello\nword/hello\nshell/”来进行处理,发现有匹配成功的地方那么就执行s替换命令。最后再执行第四条命令“s/hello word/hello shell/”,没有匹配的地方,则不执行任何操作。

    经过上面的流程后,sed接着开始读取,清空缓冲区,因为指针指向第二行,所以现在读取2+1行,即第三行,接着用第一条命令进行匹配,发现有匹配成功的地方则进行替换。然后执行第二条命令 “N” 读取第四行的内容并追加在第三行的后面,同时移动指针指向第四行。接着执行第三条命令,发现没有匹配的地方则不做任何操作,最后执行第四条命令,发现刚追加的第四行内容有匹配的地方,然后进行替换。

    最后第五和第六行的执行流程同上,这里就不再分析了。


    文中如有什么错误的地方,希望能留言指正。欢迎关注我的Github


    展开全文
  • linux shell 中sed用法

    千次阅读 2016-11-18 16:52:25
    ...sed是一款流编辑工具,用来对文本进行过滤与替换工作, sed通过输入读取文件内容,但一次仅读取一行内容进行某些指令处理后输出,sed更适合于处理大数据文件。 (2)工作原理 sed在处理文

    转自:http://www.360doc.com/content/16/1118/16/38309198_607576538.shtml


    一, 基本概述

    (1)基本介绍

    sed是一款流编辑工具,用来对文本进行过滤与替换工作,  sed通过输入读取文件内容,但一次仅读取一行内容进行某些指令处理后输出,sed更适合于处理大数据文件。
    (2)工作原理

    sed在处理文本文件的时候,会在内存上创建一个模式空间,然后把这个文件的每一行调入模式空间用相应的命令处理,处理完输出;接着处理下一行,直到最后。

    (3)与vim的区别

    vim需要通知处理文件的哪几行才会去处理,sed默认会处理文件的所有行,除非你告诉它不处理哪几行。

    二, sed的基本语法

    (1)sed [选项]  [定址commands] [inputfile]

    关于定址:

    定址可以是0个、1个、2个;通知sed去处理文件的哪几行。

    0个:没有定址,处理文件的所有行

    1个:行号,处理行号所在位置的行

    2个:行号、正则表达式,处理被行号或正则表达式包起来的行

    (2)

    选项:

           --version            显示sed版本hao

           --help               显示帮助文档

           -n 关闭默认输出,默认将自动打印所有行

           -e 多点编辑,允许多个脚本指令被执行。

           -r 支持扩展正则+ ? () {} |

           -i 可以修改原文件,慎用!

           -f 支持使用脚本

    命令:

           p打印行

           d        删除行

           s           替换

           n替换第几个匹内容

           w另存为

           a         之后添加一行

           i         当前行之前插入文本

           y        替换匹配内容


    三, 实际案例讲解

    (1)p(与-n合用)

    查看passwd文件的1~3行

    @1,打印一到三行

    [root@tx3 ~]# cp /etc/passwd /t1

    [root@tx3 ~]#  cat -n t1 | sed  -n '1,3p'

        1root:x:0:0:root:/root:/bin/bash

        2bin:x:1:1:bin:/bin:/sbin/nologin

        3daemon:x:2:2:daemon:/sbin:/sbin/nologin


    @2,查看passwd文件的lp~halt行

    [root@tx3 ~]#  cat -n t1 |sed -n '/lp/,/halt/p'

        5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

        6sync:x:5:0:sync:/sbin:/bin/sync

        7shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

        8halt:x:7:0:halt:/sbin:/sbin/halt

    @3, 打印基数行(从第一行开始,每隔一行一输出)

    @4,打印uid是0或1的行

    [root@tx3 ~]# sed -n '/x:[01]:/p' t1

    root:x:0:0:root:/root:/bin/bash

    bin:x:1:1:bin:/bin:/sbin/nologin


    (2)d 删除

    @1,删除第一行

    @2,删除第一行和第三行(与-e选项合用)

    @3,;选项的使用和-e一样

    @4,取反:!

    [root@tx3 ~]#  cat -n t1 | sed '1!d'

        1root:x:0:0:root:/root:/bin/bash

    (3)s 查找替换 s///

    语法:

           '[address]s/pattern/replacement/flags'

                           old     new

    flags:

               n:1-512 之间的正整数,表示替换模式里面出现的第几次内容

               p:打印

               g:全局修改

               w:另存为

           这几个选项是可以复合使用的,但是写的要有意义。(pg ;nw)

    注:这里为部分截取

    @1默认会替换行里面的第1个匹配

    [root@tx3 ~]# sed 's/root/ROOT/' t1

    ROOT:x:0:0:root:/root:/bin/bash

    bin:x:1:1:bin:/bin:/sbin/nologin

    @2全部替换

    [root@tx3 ~]# sed 's/root/ROOT/g' t1

    ROOT:x:0:0:ROOT:/ROOT:/bin/bash

    bin:x:1:1:bin:/bin:/sbin/nologin

    @3替换第2个匹配

    [root@tx3 ~]# sed 's/root/ROOT/2' t1

    root:x:0:0:ROOT:/root:/bin/bash

    bin:x:1:1:bin:/bin:/sbin/nologin

    @4打印

    [root@tx3 ~]# sed 's/root/ROOT/p' t1

    ROOT:x:0:0:root:/root:/bin/bash

    ROOT:x:0:0:root:/root:/bin/bash

    bin:x:1:1:bin:/bin:/sbin/nologin‘

    [root@tx3 ~]# sed -n 's/root/ROOT/p' t1

    ROOT:x:0:0:root:/root:/bin/bash

    operator:x:11:0:operator:/ROOT:/sbin/nologin

    @5另存为

    [root@tx3 ~]# sed -n 's/root/ROOT/w /tx' t1

    [root@tx3 ~]# cat /tx

    ROOT:x:0:0:root:/root:/bin/bash

    operator:x:11:0:operator:/ROOT:/sbin/nologin

    @6在文件的每行前面添加 # 注释

    [root@tx3 ~]# sed 's/^/#/' t1

    #root:x:0:0:root:/root:/bin/bash

    #bin:x:1:1:bin:/bin:/sbin/nologin

    #daemon:x:2:2:daemon:/sbin:/sbin/nologin

    @7删掉文件的第1个字符

    [root@tx3 ~]# sed 's/^.//1' t1

    oot:x:0:0:root:/root:/bin/bash

    in:x:1:1:bin:/bin:/sbin/nologin

    aemon:x:2:2:daemon:/sbin:/sbin/nologin


    @8删掉文件的第2个字符

    [root@tx3 ~]# sed 's/.//2' t1

    rot:x:0:0:root:/root:/bin/bash

    bn:x:1:1:bin:/bin:/sbin/nologin


    (4)i 从当前行插入

    在第一行前插入hello

    [root@tx3 ~]# sed '1i hello' t1

    hello

    root:x:0:0:root:/root:/bin/bash

    bin:x:1:1:bin:/bin:/sbin/nologin

    (5)a 从当前行后添加

    在第一行后添加hello

    [root@tx3 ~]# sed '1a hello' t1

    root:x:0:0:root:/root:/bin/bash

    hello

    bin:x:1:1:bin:/bin:/sbin/nologin


    (6)-r 支持扩展正则

    [root@tx3 ~]# sed -r 's/^(.)(.)/\1/' t1

    rot:x:0:0:root:/root:/bin/bash      //相当于把前两个字符替换成第一个字符,这样就实现了删除第二个字符

    bn:x:1:1:bin:/bin:/sbin/nologin

    demon:x:2:2:daemon:/sbin:/sbin/nologin

    其他方法:

    @1#sed 's/.//2' t1

    @2#sed 's/^\(.\)\(.\)/\1/' t1


    (7)y 替换,按照位置来匹配替换  y///      不识别re


    [root@tx3 ~]# sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' t1

    ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH

    BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN

    DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN

    (8)替换匹配行

    @1[root@tx3 ~]# sed -n '1c ROOT' t1

    ROOT

    (9)q 退出

    [root@tx3 ~]# sed '1q ' t1

    root:x:0:0:root:/root:/bin/bash

    (10)-i        可以修改原文件

    (11)-f 支持脚本

    四.sed如何处理数据


        PATT:模式空间,处理文件的输入行,处理文件的空间,最多保存8192字节,相当于车间sed把流内容在这里处理。

        HOLD:保留空间,用来保存已经处理的输入行;最多保存8192字节;默认有一个空行,相当于仓库,加工的半成品在这里临时储存。


    COMM:命令

    h:将模式空间里的内容,复制到保留空间里,覆盖原来的内容 >

    H:将模式空间里的内容,追加到保留空间里,保留原来的内容 >>

    g:将保留空间里的内容,复制到模式空间里,覆盖原来的内容

    G:将保留空间里的内容,追加到模式空间里,保留原来的内容

    n:对匹配行的下一行进行处理

    x:交换模式空间和保留空间的内容

    (1)h;G

    @1.将第一行的内容放到打三行后面

    @2.在每行的后面添加1个空行

    注:1.保留空间里默认有一个空白行。2,‘G’默认处理全局

    @3.把第1行到第4行的数据复制到第5行后面

    注:1h是为了覆盖保留空间里的空白行

    @4. 把第1行到第4行的数据剪切到第5行后面

    (2)n    对匹配行的下一行进行处理

    (3)x     交换模式空间和保留空间的内容

    展开全文
  • shell中sed的用法

    千次阅读 2019-06-14 21:54:27
    处理时,把当前处理的行存储在临时缓冲区,称为“模式空间”(pattern space),接着用sed命令处理缓冲区的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并...
  • 想向文件插入一行文案 但是总是解析传入的变量错误,几种实测的结果如下 sed -i "/^dependencies *{$/a\${junitVersion}" $gradleFolder --->结果: ${junitVersion} sed -i "/^dependencies *{$/a\/${junit...
  • shell中sed命令

    2015-07-13 17:36:26
    sed -i '/cd ${LDIR_DEST}\/webextend\/pc && ln -s \/hard\/www_winclient\/bboxpc.exe ./a\ \tcd ${LDIR_DEST}\/webextend\/pc && ln -s \/hard\/www_winclient\/'$i' .' #参考别人后自己改的,...sed -i '4i dfsdfd
  • shell中sed -i特殊字符

    2021-05-14 13:56:49
    可参考文献:看懂shell中的各种语句
  • shell中sed的使用

    2014-11-29 11:50:51
    1.在命令行定义编辑器命令 命令格式 sed options script...将命令放在一个文件 3.s命令使用替换标记 .数字代表新文本将替换第几处模式匹配的地方 .g,替换所有的 。p,原来的内容打印出来 。w file,将替
  • shell中sed分组命令用法

    千次阅读 2018-08-14 10:43:33
    关于sed分组命令的用法,大括号里面的是嵌套的地址,拿上图举例,首先用/b/选择出包含b的行,然后后面大括号的代码就是对包含b的行的再次操作,先是把包含hello的行里的world换成shiyanlou,然后再把包含d的行里的...
  • 场景: * soft nofile 630000 * hard nofile 654300 grep 匹配如上文本,由于最后一列数字是可变的,并且每列之间可能存在任意个空格或制表符 grep -E '^\*[[:space:]]+soft[[:space:]]+no...sed -n 's/\*[[:space:
  • shell scripts 如果要让变量的值发生变化,得用expr 表达式: j=`expr $i + 1` # 注意 expr 后的每个变量之间要加空格 ...如果shell 里用到了 sed 那么sed单引号应该变为双引号,并且变量应该${i} 这种形式
  • shell中sed命令失灵,又一个坑。。。

    千次阅读 2017-07-06 20:11:06
    今天写shell的时候用到了sed,原本是要删除所有包含指定字符的行 由于shell用的不是很熟练,所以在命令行上敲了好几遍,发现没有问题,结果放到shell里就不行了,直接看代码(代码被处理了,主要是表达清楚意思) ...
  • 今天在学习shell时,无意碰到了这么一个用
  • shell 传参sed

    千次阅读 2016-08-13 11:19:00
    shell 传参sedshell 传参给sed 时,会失效,原因是单引号” ,它会阻止转义 。 So 把单引号改为 双引号 “” ,就OK 了。举个栗子:#!/bin/shsessionID=$1 echo "Usage: pplog.sh $sessionID "#Test1 :correct ...
  • shell sed 详述

    2011-09-23 08:02:16
    shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述...
  • Shellsed命令.pdf

    2021-09-14 13:57:14
    Shellsed命令.pdf
  • shell awk sed

    2010-08-20 16:31:10
    本资料涵盖了关于shell教程,sed和awk教程,设备驱动开发,和深入理解内核,多为英文原版资料。
  • 最近在学习shell,为了练习sed,写了个简单的批量修改文件名的脚本,所以下面这篇文章主要给大家介绍了关于Linux shell利用sed如何批量更改文件名的相关资料,需要的朋友们可以参考借鉴,下面来一起看看吧。
  • shellsed

    2014-03-03 11:33:35
    在一般 sed 的用法,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。 -e :直接在命令列模式上进行 sed 的动作编辑; -f :直接...
  • sed 's/text1/text2/' file,text1与text2包含|,怎么转义呢? sed -n '/$orderid/s/SUCCESS|0|扣款成功/FAIL|G002|交易失败/' file SUCCESS|0|扣款成功 为text1 FAIL|G002|交易失败 为text2 想要把包含$orderid的...
  • 多年工作实践总结ShellSed常用用法,都是必须要掌握的!
  • linux shell命令sed的使用方法
  • shell ant sed命令

    2019-04-13 01:06:07
    NULL 博文链接:https://jaybin.iteye.com/blog/1717143
  • 文章来源:《[shell] sed 插入多行文本》 1. 脚本意图 删除 2 - 7 行的文本。 从第 2 行插入多行文本。 2. 脚本使用 ./script your_path 3. 脚本源码 #!/bin/sh work_path=$(dirname $0) cd $work_path ...
  • 之前打算用shell解析html,但是网上的方法并不多,更多的是忠告:“shell本身就不是用来解析html的,换perl或python能起到事半功倍的效果”等等。但是,对于不会perl和python的我来说,未免有些困难。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,838
精华内容 39,935
关键字:

shell中sed