一、grep
grep和一些正则表达式,之前写过,所以这篇就不多描述了(点击这里跳转)
grep命令——检索和过滤文件内容 (在文件中去查找并显示包含指定字符串的行)
语法结构: grep 选项 查找条件 目标文件
选项:
-i 查找内容时忽略大小写
-v 条件反转 (和所写的条件正好完全相反)
-n 显示行号
二、sed流编辑器
(1)sed简介:
sed是一种流编辑器,它是文本处理中非常适中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的’行‘存储在临时缓冲区中,又称为 ‘模式空间’(pattern space) ,接着使用sed命令再去处理缓冲区中的内容,处理完成后,把缓冲区的内容输出到屏幕上,接着再去处理下一行,这样不断重复,知道处理到文件的末尾,文件内容并没有改变(也可以加选项,去直接修改文件,或者使用重定向指定文件,存储数据)
sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等
(2)工作流程:
- 读取——执行——显示
- 常见用法:
sed [选项] ‘操作’ 参数
sed [选项] -f scriptfile 参数
参数就是文件,也就是指定的待处理的文本文件列表
- 常见选项
1. -n sed默认输出全部内容,-n是只输出匹配到的内容,这个选项一般只用于查看 2. -i sed默认是不会修改文件内容的,-i会直接修改文件内容 3. -r 加这个选项可以使sed支持扩展正则表达式 4. -e 匹配多个命令
- 常见操作
1. a 在当前行下面插入文本。5aaaaa即在第5行添加aaaa,a是在指定行的下一行添加指定字符 2. i 在当前行上面插入文本。5ibbbb即在第5行插入bbbb,i是指在指定行插入指定字符,并且把原来的行移到下一行 3. c 把选定的行改为新的文本。5caaaa即把第5行变成aaaa,原来的行会消失 4. d 删除,删除选择的行。使用;号可以分割开,2d;3d即删除第2行和第3行 5. D 删除模板块的第一行。5D和5d的效果相同,但是单独输入一个D或者d会删除全部内容 6. s 替换指定字符,一般格式为s///g 如:s/aaa/bbb/g,即把每行的aaa全部换成bbb,后面的g就是替换当前行的所有 2s/cc/bb/2,即把第二行的第2个cc换成bb,后面的2表示换第2个,2s即表示第2行 7.p 打印指定行,可以使用,来表示几行到几行,如:2,4p即打印2到4行,或者;号来分割,3p;5p表示打印3行和5行
-不常用操作
1. h 拷贝模板块的内容到内存中的缓冲区。 2. H 追加模板块的内容到内存中的缓冲区。 3. g 获得内存缓冲区的内容,并替代当前模板块中的文本。 4. G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。 5. l 列表不能打印字符的清单。 6. n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。 7. N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。 8. p 打印模板块的行。 9. P(大写) 打印模板块的第一行。 10. q 退出Sed。 11. b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。 12. r file 从file中读行。 13. t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 14. T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 15. w file 写并追加模板块到file末尾。 16. W file 写并追加模板块的第一行到file末尾。 17. ! 表示后面的命令对所有没有被选定的行发生作用。 18. = 打印当前行号码。 19. # 把注释扩展到下一个换行符以前。
- sed元字符集
1. ^ 匹配行开始 2. $ 匹配行结束 3. . 匹配一个非换行符的任意字符 4. * 匹配0个或多个字符 5. [] 匹配一个指定范围内的字符 6. [^] 匹配一个不在指定范围内的字符 7. \(..\) 匹配子串,保存匹配的字符 8. & 保存搜索字符用来替换其他字符 9. \< 匹配单词的开始 10. \> 匹配单词的结束 11. x\{m\} 重复字符x,m次 12. x\{m,\} 重复字符x,至少m次 13. x\{m,n\} 重复字符x,至少m次,不多于n次
sed用法示例
创建测试文件:(之后的测试都是按这个文本来的,直接复制就行)
[root@localhost ~]# cat test.txt he was short and fat. He was wearing a blue polo shirt with black pants. The home of Football on BBC Sport online. the tongue is boneless but it breaks bones.12! google is the best tools for search keyword. The year ahead will test our political establishment to the li PI=3.141592653589793238462643383249901429 a wood cross! Actions speak louder than words #woood # #woooooood # AxyzxyzxyzxyzC I bet this place is really spooky late at night! Misfortunes never come alone/single. I shouldn't have lett so tast.
(1)输出符合条件的文本
——输出所有内容,等同于cat test.txt
——输出第三行
——输出第三到五行
——输出所有奇数行 (n 表示读入下一行)
——输出所有偶数行
——输出1-5奇数行
——输出第四行至第一个包含the的行(也就是第四行开始,一直筛选到下一个包含the的行,这里是第五行就有the,所以筛选了两行)
——输出包含the的所在行的行号(= 用来输出行号,只显示行号)
——输出以PI开头的行(^以PI开头)
——输出以数字结尾的行($就是以什么什么结尾)
——输出包含单词wood的行<单词>表示单词边界(即想要筛选包含单词的行就要使用\<wood\>这种的)
(2)删除符合条件的文本 ’d’
nl ——计算文件的行数
也就是说可以配合nl然后操作sed去删除指定的行数
——删除第三行 (因为全截图的话就太大了,所以之后都是局部截图,主要是知道效果即可)
——删除三到五行
——删除包含cross的行
——删除不包含cross的行 (!即相反的意思!d即是反向删除不带cross的行)
——删除开头为小写字母的行
——删除以’ . ‘结尾的行('/\.$/d' ,这个d前面的/容易打成\,操作时要注意)
——删除空行
——删除重复的空行(这个等同与cat -s test.txt,)