linux中grep、sed、awk使用

1.管道

linux中使用|将两个命令隔开,|左边的输出作为|右侧命令的输入

eg:cat 1.txt|grep "xxxy"

2.正则表达式

正则是记录文本规则的代码

练习环境:https://tool.oschina.net/regex

常用的元字符
. 匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束
常用的限定符 *重复0次或者更多次 +重复一次或多次 ?重复0次或一次 {n}重复n次 {n,}重复n次或更多次 {n,m}重复n到m次
匹配以字母a开头的单词:\ba\w*\b
匹配6个字母的单词:\b\w{6}\b
匹配1个或更多连续的数字:\d+
匹配5-12位qq号:\d{5,12}
匹配只包含5-12位qq号:^\d{5,12}$

3.grep:根据用户指定的模式对目标文本进行过滤,显示被模式匹配到的行

grep options pattern file
option:    -v 显示不被pattern匹配到的行
            -i 忽略字符大小写
            -n 显示匹配的行号
            -c 统计匹配的行数
            -o 仅显示匹配到的字符串
            -E 使用ERE,相当于egrep,开启扩展(Extend)的正则表达式
           --color 将匹配到的内容以颜色高亮显示
           -A  n 显示匹配到的字符串所在的行及其后n行,after
           -B  n 显示匹配到的字符串所在的行及其前n行,before
           -C  n 显示匹配到的字符串所在的行及其前后各n行,context
              linux中grep、sed、awk使用
              linux中grep、sed、awk使用
              linux中grep、sed、awk使用
查找文件内容包含html的行数 cat response.txt|grep -n html 、 grep -n html response.txt 
查找文件内容不包含html的行数 cat response.txt|grep -nv html
查找文件内容以h开头的行:grep -n ^h response.txt
查找文件内容以t结尾的行:grep -n t$ response.txt

 4.sed:是流编辑器,一次处理一行内容

行存储在模式空间-sed命令处理-进入屏幕-清空模式空间,源文件不会被改变

sed [-hnV][-e<script>][-f<script FILE>][FILE]
      -h  显示帮助,man sed(j向下翻页,k向上翻页,/内容  去查找,N上一个,n下一个)
      -n  仅显示script处理后的结果
      -e<script>以选项中指定的script来处理输入的文本文件
      -f<script>以选项中指定的script来处理输入的文本文件

      -e后的常用动作:
      a 新增,sed -e '4 a newline'   在第4行后新增一行
      c 取代,sed -e '2,5c No 2-5 number'  c后面的东西取代2-5行内容
      d 删除,sed -e '2,5d' 删除2-5行的内容
      i  插入,sed -e '2i newline' 在第2行前插入一行
      p 打印,sed -n '/root/p' 打印匹配到的/root/---/正则表达式/
      s 取代,sed -e 's/old/new/g'  全局修改/new/取代/old/ ,不加g时表示只修改每行第一个匹配到的值
        linux中grep、sed、awk使用

        -i直接修改文件内容:sed -i '2i newline' file

5.awk:把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行后续处理

把行作为输入,并赋值给$0 ,将行切断,从$1开始,对行匹配正则/执行动作-打印内容,读入第二行循环前面几步的动作
awk 'pattern + action' [FILE]
-pattern 正则表达式
-action 对匹配到的内容执行的命令(默认为输出每行内容)

常用参数
FILE awk浏览的文件名
BEGIN 处理文件之前要执行的操作
END 处理文件之后要执行的操作
FS 设置输入域分隔符,等价于命令行-F选项
NF 浏览记录的域的个数(列数)
NR 已读的记录数(行数)
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
$0 整体记录
$1 表示当前行的第一个域,以此类推

搜素/etc/passwd有root关键字的所有行,并显示对应的shell
  linux中grep、sed、awk使用

 

上一篇:spring的AOP动态代理--JDK代理和CGLIB代理区分以及注意事项


下一篇:Linux运维脚本