美文网首页大数据分析技术文程序员
想掌握强大的sed工具?收藏本文就够了!

想掌握强大的sed工具?收藏本文就够了!

作者: 宝王爷 | 来源:发表于2016-10-20 15:06 被阅读199次

1. 如果要将sed编辑的结果写入文件,需要-i参数,如果存在多个编辑指令,需要在前面添加-e参数

sed -i -e 's/hhhhh/hello/g' -i -e 's/ha/ho/g' test ,不能写成-ie (注意:i 必须在e之前,否则会报错)

2.  删除最后一行 sed '$d' file(注意这里的$和vi编辑命令中使用字符串替换命令时的$意思类似,表示文件的最后一行,不是代表单纯输入$时表示跳到一行的末尾)

3.  删除所有行的命令sed  '1,$d' file,如果配合-i则相当于是清空文件(和vi编辑中 :1,$s/word1/word2/g类似,但后者需要文档中都是同样的单词)

4.  sed中删除第n行是sed 'nd' file(类似vi编辑命令中删除一行是使用dd),反之需要仅仅保留某行时,输入sed 'n!d' file

这里的感叹号的使用也可以扩展,需要活学活用,比如使用在sed -n 'n!p'即表是将除了第N行之外的所有行打印出来。

另举例如下:某文件夹下包含了如下的文件,中间的省略号表示包含2015时间的文件有很多

-rw-------. 1 billcs billcs    438512 10月 27 17:50 ABM_CMdbInUser.mdb.0058.20150926

-rw-------. 1 billcs billcs    438512 10月 27 17:40 ABM_CMdbInUser.mdb.0072.20151010

-rw-------. 1 billcs billcs    438512 10月 27 17:50 ABM_CMdbInUser.mdb.0080.20151018

-rw-------. 1 billcs billcs     29696 10月 27 17:53 ABM_CMdbInTidB.mdb

为了将所有不包含2015时间的文件显示出来,可以使用如下的命令:

ls -l | sed -n '/2015/!p'

5.  sed 's/linux/bowen/2' file  表示对每一行第二个linux字符串进行替换,不满足条件即使处在整行第二的位置也不替换

注意:s/linux/bowen/的写法其实默认是省略了1,即和s/linux/bowen/1的含义是一致的,只将每一行的第一个linux进行替换,如果写成2的话则就是上面的意思了。

6.  删除包含某字符串的行sed '/str1/d' file(这也和vi编辑中s/str1/str2/g类似,前面的s和后面的g都是替换字符串需要的,而这里是/d,且/str1就是要将str1找出来并换成str2,而sed中执行删除时不是替换,仅需要找出str1出来而已)

被替换的str1不需要是完整显示且前后都是空白的字符串,可以只是完整字符串其中的一部分,例如:

file内容为

line1   1       2       3       4

line2   hello   nihao   haha    bye

line3   xilineha   linux   bowen    xixi

line4   bowen   unix    linux   haha

执行sed 's/line/hoho/2' file,结果为:

line1   1       2       3       4

line2   hello   nihao   haha    bye

line3   xihohoha   linux   bowen    xixi

line4   bowen   unix    linux   haha

即只将第三行第二个字符串中的一部分line替换成了hoho

7.  删除空行 sed '/^$/d' file(不包括空格,TAB和控制字符行

8.  sed字符转换的用法  sed 'y/1234/ABCD/' file

1)可以这么记忆y,相当于是每替换一个字母时都需要询问确认一下 y or n?(切记是将全文每个对应的字符都替换,而不是只替换1234字符串

2)和tr相比较,本命令的缺点就是转换字符和被转换字符长度一定要相等

9.  sed '/linux/a gbh' file和sed '/linux/a\gbh' file效果一样(a表示在匹配行的下一行添加内容,i表示在上一行添加内容)

10.  读取外部文件test时,如果test和file在同一个路径下,可以直接添加单引号,不需要输入./test,如下:

sed '/line1/r 'test'' file

建议直接使用绝对路径而不添加单引号

11. 使用p打印命令时需要添加-n参数,否则因为sed本身会默认将所有的行都打印出来,又由于添加了p命令,所以会使得结果中出现重复的行。

例如:输入 sed '1p' file,由于未带-n,第一行出现了重复

line1   1       2       3       4

line1   1       2       3       4

line2   hello   nihao   haha    bye

line3   hellod  linux   linux    xixi

line4   line5   unix    linux   haha

12.  sed -f sedrule file 将常用的指令写入sedrule文件中,通过-f参数就可以进行调用,这实际上是将使用sed时单引号中的指令集中放到文件中,便于使用,所以文件中的指令不需要再加单引号。例如:cat sedrule后显示:

/^$/d

s/linux/bowen/g

13.  替换匹配行的下一行  sed '/line2/{n;s/hello/bowen/}' file (n可以理解为next的意思

如果不添加n,直接是sed '/line2/{s/hello/bowen/}' file,该命令的含义就是先定位到某一行,然后对本行进行替换操作

14. l(L的小写)表示列出非打印字符,如常用的查看文件中TAB的命令 sed -n l file

15. sed -n '$=' test.sh 获取文件的总行数,和awk 'END{print NR}' test.sh效果一样

(这和ll | wc -l获取的结果是有差异的,wc会比前两者少1,因为wc是计算当前文件夹下的文件数再加上文件夹本身。前面两个是获取直观的文件数和隐藏的.和..的总和)

16,动态获取文件的每一行的内容 sed -n "${n}p" test.sh ,其中n是变量,所以必须使用双引号

注意这里必须使用双引号,如果n为1,在使用sh -x调试时可以发现会打印成sed -n '1p' test.sh,即双引号此时解释成了单引号

--END--

鉴于数据分析能力越来越成为每个职场人的必备技能,所以我最近新打造了本垂直公号,这里聚焦分享数据分析和脚本编程的干货,欢迎大家都转起来,让更多的人来一起碰撞,交流,提升!

相关文章

  • 想掌握强大的sed工具?收藏本文就够了!

    1. 如果要将sed编辑的结果写入文件,需要-i参数,如果存在多个编辑指令,需要在前面添加-e参数 sed -i ...

  • sed常用模板整理

    sed可以按照指令或脚本编辑文本的linux工具,文本处理功能非常强大,本文总结一些工作中常用的sed模板,方便大...

  • Linux命令之sed批量替换字符串操作

    Linux中sed命令功能强大,本文将详细介绍如何使用sed命令进行字符串替换。一、基本的替换命令格式1:sed ...

  • 【linux命令之awk】

    AWK是一种处理文本文件的语言,是一个强大的文本分析工具,稍候会有grep和sed命令的使用。 awk、grep、...

  • 10-文本处理三剑客之sed

    本章内容 ◆ Sed介绍◆ Sed用法◆ Sed高级用法 处理文本的工具sed sed工具 练习 1、删除cent...

  • 【生物信息笔记...】Linux awk命令

    什么是awk? AWK是一种处理文本文件的语言,是一个强大的文本分析工具。相对于grep的查找,sed的编辑,aw...

  • Linux常用文本操作命令 2019-05-19

    关于文本的工具,比较常见的有vi、sed、awk、grep等 sed工具: sed工具最常用来批量编辑文档,例如文...

  • sed命令详解

    本文转自 http://man.linuxde.net/sed sed是一种流编辑器,它是文本处理中非常中的工具,...

  • awk命令详解

    写在最开始 相比于sed,awk就显得强大多了。如果说sed是轻巧的山地摩托,那awk就是装甲坦克,分分钟把sed...

  • sed使用技巧

    sed工具 sed工具的用法有很多地方和grep相似,但是grep实现的只是查找而不能替换,sed工具则可以这么操...

网友评论

本文标题:想掌握强大的sed工具?收藏本文就够了!

本文链接:https://www.haomeiwen.com/subject/rcifuttx.html