后来也找到一篇文章讲的很详细: http://www.cnblogs.com/ctaixw/p/5860221.html

---------------------------------------

sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法
sed命令行格式为:
         sed [-nefri] ‘command’ 输入文本

常用选项:
        -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 会与参数 sed -n 一起运作~
         s  ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表示法!例如 1,20s/old/new/g 就是啦!

举例:(假设我们有一文件名为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
[root@localhost ruby] # sed '1a drink tea\nor coffee' ab #第一行后增加多行,使用换行符\n
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

自己练习:

dahu@dahu-OptiPlex-:~/myfile$ cat hehe.txt
hehe
lele
haha
lele
lele
dahu@dahu-OptiPlex-:~/myfile$ sed -n '/.*el.*/p' hehe.txt
lele
lele
lele
dahu@dahu-OptiPlex-:~/myfile$ sed -i 's/.*el.*//g' hehe.txt
dahu@dahu-OptiPlex-:~/myfile$ cat hehe.txt
hehe haha

删除文件中的空格

sed -i 's/\s//g' wrong_in30_notwrongin28.norm

多命令输入:,知识点:-e可以连接多条命令,-i是对源文件进行操作,不加只是会输出到终端,最后再用awk输出一下格式.

xch27@taiyuan:/asrdata/users/xch27/lmwork/comm_cloud/aicar_solution/v31_9jun2017.navi/decode0./adderr$ head all.add.err.sentence
Aligned transcription: csnt----lzyuam--GSHAW1_0000000_0000000_M.lab vs csnt----lzyuam--GSHAW1_0000000_0000000_M.rec
LAB: 发 短 信 给 陶 斌
REC: 发 短 信 给 洮 滨
Aligned transcription: csnt----yrongf--GSNOTE_0000000_0000000_F.lab vs csnt----yrongf--GSNOTE_0000000_0000000_F.rec
LAB: 发 信 息 给 亲
REC: 发 信 息 给 钦
Aligned transcription: 4c3bf7f4c95b40b0b541e9a60ada11fd.lab vs 4c3bf7f4c95b40b0b541e9a60ada11fd.rec
LAB: 关 注 了 就 别 塞
REC: 关 注 的 久 别 赛
Aligned transcription: 9abc86bad9e14d9d9fd6cb1f5f0ce301.lab vs 9abc86bad9e14d9d9fd6cb1f5f0ce301.rec xch27@taiyuan:/asrdata/users/xch27/lmwork/comm_cloud/aicar_solution/v31_9jun2017.navi/decode0./adderr$ sed -e '/Aligned/d' -e 's/\s//g' all.add.err.sentence |awk -F":" '{print $2}' | head
发短信给陶斌
发短信给洮滨
发信息给亲
发信息给钦
关注了就别塞
关注的久别赛
九龙仓集团的股价是多少
九龙仓集团的股票是多少
靠郎溪
靠琅西

多重命令

sed -f 文件

dahu@dahu-OptiPlex-:~/myfile$ cat tmp
hehe wo
wojintian
dahu@dahu-OptiPlex-:~/myfile$ cat sedscript
s/wo/ta/g;
s/he/she/g;
dahu@dahu-OptiPlex-:~/myfile$ sed -f sedscript tmp
sheshe ta
tajintian

sed 获取匹配到的内容 ,需要 加 -r  ,下面这个例子简洁,直观.-r表示扩展,还是很方便的.

dahu@dahu-OptiPlex-:~/myfile$ echo "wo he ni"|sed -r 's/(wo)(.*)(ni)/\3\2\1/g'
ni he wo

在shell 传参给sed 时,会失效,原因是单引号” ,它会阻止转义 。

方法1: 把单引号改为 双引号 “” ,就OK 了。

举个栗子:

#Test1 :correct sample
sed -n "/${sessionID}-START/,/${sessionID}-END/p" t.t

方法2: 变量${} 外的字符串全都用单引号”圈住

$sed -n '/'${sessionID}'-START/,/'${sessionID}'-END/p' t.t

sed的其他分隔符!这个很关键

有的时候我们会遇到这样的错误:

$ sed 's/ni/'${a}\/hehe$v'/g' tmp
sed: -e expression #, char : unknown option to `s'

这是是因为使用斜杠(/)作为sed's's'命令的分隔符,并且在sed中看到的分隔符中有一个斜线。 尝试使用不同的分隔符'|'

例子:

$ sed 's|ni|'${a}\/hehe$v'|g' tmp
hehe,sb/hehesdzaina
wo ai sb/hehesd

sed实践的更多相关文章

  1. sed 实践案例 (不定期更新)

    删除每行第一个字符 sed -r 's/^.//g' /etc/passwd 删掉每行第二个字符 sed -r 's/^(.)(.)/\1/g' /etc/passwd 删掉每行最后一个字符 sed ...

  2. 【转】sed 学习笔记

    一  .  sed 简介 1  .  功能 sed 是一种流编辑器,所谓流编辑器是指能够对来自文件或者管道的输入流进行基本的文本转换的工具,比方说查找替换删除等. 2  .  最简单的运作机制 sed ...

  3. liunx 运维知识三部分

    一. 用户级用户组相关 二. 文件属性和链接知识及磁盘已满故障案例 三. 通配符 四. 特殊符号 五. 基础正则 六. 扩展正则 七. sed实践 八. awk实践

  4. Linux中sed的用法实践

    Linux中sed的用法实践 参考资料:https://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html http://www.fn139 ...

  5. linux三剑客之sed深度实践

    参数: -a:追加文本到指定行后 -i:插入文本到指定行前 1.单行增加 [root@redhat~]#   sed  ' 2a  6,f '  linux.tet 1,a 2,b 6,f 3,c 4 ...

  6. linux三剑客grep|sed|awk实践

    最好先学习正则表达式的基本用法,以及正则表达式BREs,EREs,PREs的区别 此坑待填 grep sed awk

  7. Linux三剑客之sed深度实践讲解(下)

    2.3.4分组替换 \(  \) 和\1的使用说明 echo I am dongdaxia yingxiong. |sed 's#^.*am \([a-z].*\) yin.*$#\1#g' echo ...

  8. Linux三剑客之sed深度实践讲解(上)

    sed sed 是Stream Editor(流编辑器)缩写,是操 作过滤和转换文本内容的强大工具.常用功能有增删改查,过滤,取行. 2.增删改查 2.1 增 a 追加文本到指定行后 i 插入文本到指 ...

  9. 10.15 sed 命令实践

    在n行前插入 [root@wen data]# sed '2i 106,dandan,CSO' person.txt101,oldboy,CEO106,dandan,CSO102,zhangyao,C ...

随机推荐

  1. 课程14:get和post是神马

    http://www.codeschool.cn/lesson/14.html get和post是神马? get和post是http中两种最常用到的请求类型 简单理解get请求 get请求多用于获取信 ...

  2. mysql 给用户赋值权限

    解决办法 grant all privileges on *.* to joe@localhost identified by '1'; flush privileges; 拿 joe 1 登陆 附: ...

  3. nginx 前后分离,地址重写,url匹配中遇到的问题

    我遇到的问题: 前端用vue的路由做页面路由,后台用spring mvc做数据接口,但是遇到路由地址和接口地址无法区分的问题,导致nginx无法正确准发比如: 1)http://127.0.0.1/i ...

  4. Shell编程——vim常用命令

    [vim]工作模式切换:    在普通模式下输入 i(插入).c(修改).o(另起一行) 命令时进入编辑模式:按 esc 键退回到普通模式.    在普通模式下输入冒号(:)可以进入命令模式.输入完命 ...

  5. 【Codeforces752D】Santa Claus and a Palindrome [STL]

    Santa Claus and a Palindrome Time Limit: 20 Sec  Memory Limit: 512 MB Description 有k个串,串长都是n,每个串有一个a ...

  6. phpcms添加子栏目后的读取

    一个栏目下面如果没有子栏目,那么它调用的模板就是列表页模板(及list_为前缀的模板):如果一个栏目下面有子栏目,那么它调用的就是栏目首页模板(category_为前缀的模板). 所以,当你这个栏目添 ...

  7. 洛谷 Transformations 方块转换

    Description 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式: 1:转90度 ...

  8. HDU 2319 Card Trick (模拟)

    题目链接 Problem Description The magician shuffles a small pack of cards, holds it face down and perform ...

  9. 机器学习-kNN-数据归一化

    一.为什么需要数据归一化 不同数据之间因为单位不同,导致数值差距十分大,容易导致预测结果被某项数据主导,所以需要进行数据的归一化. 解决方案:将所有数据映射到同一尺度 二.最值归一化 normaliz ...

  10. 【文件上传】jquery之ajaxfileupload异步上传插件

    来自:http://www.blogjava.net/sxyx2008/archive/2010/11/02/336826.html 由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用J ...