1,GREP

grep 是按行匹配,主要司责查询相关的操作

  1. grep [option] [pattern] [file1,file2,file3,,,,]
  2. some command | grep [option] [pattern
  3. 选项[OPTION] 含义
  4. -i 忽略大小写
  5. -c 只输出匹配行的数量
  6. -n 显示行号
  7. -r 递归搜索
  8. 实例,比如说要查找某个目录中的文件含有某个关键字的
  9. grep -r keyword 目录
  10. -E 支持扩展正则表达式
  11. -w 匹配整个单词
  12. -l 只列出匹配的文件名
  13. -F 不支持正则,按字符串字面意思进行匹配

2,SED

  1. 对行进行处理
  2. 流编辑器,对文件逐行进行处理
  3. 两种形式
  4. sed [option] "pattern command " file
  5. come command | sed [option] "pattern command"
  6. >> /dev/null 可以相当于是一个黑洞,在操作中遇到不想要的东西可以丢进去
  7. &> /dev/null
  8. option 选项
  9. -n 只打印模式匹配的行
  10. -f 加载存放动作的文件
  11. -r 支持拓展正则
  12. -i 直接修改文件
  13. pattern 模式
  14. 如果添加就只针对添加的范围,不添加默认处理全局
  15. 匹配模式 含义
  16. 5 只处理5
  17. 5,10 只处理第5行到第10
  18. /关键字/ 处理含有关键字的数据那行
  19. /^A/,/^B/ A开头的一行到以B开头的一行
  20. command 命令
  21. 查询
  22. p 打印出来查询到的结果
  23. 新增
  24. a 在匹配行后新增
  25. i 在匹配行前新增
  26. r 外部文件读入,行后新增
  27. w 匹配行写入外部文件
  28. 删除
  29. d
  30. 修改
  31. s/old/new 只修改匹配行中第一个old进行修改
  32. s/old/new/g 将所有的old进行修改
  33. s/old/new/ig 忽略大小写并对所有old进行修改
  34. sed -p 打印内容会打印两次,除了目标文件,也会将搜索结果一并打印出来

3,AWK

三剑客的核心,主要负责对列进行处理,可以当成是cut的进阶版,但是功能比cut强大的多。
awk甚至可以作为一门单独的语言来进行学习
文本处理工具,处理数据并生成结果报告。

  1. 两种形式
  2. awk 'BEGIN{}pattern{commands}END{}' file
  3. some command | grep [option][pattern]
  4. 格式 含义
  5. BEGIN{} 处理数据之前执行的内容
  6. pattern 匹配模式 进行设置的话,针对范围进行配置,
  7. 不设置则针对全部的数据进行处理
  8. {commands} 处理命令
  9. END{} 处理数字之后执行的内容
  10. 内置变量 含义
  11. $0 整行内容
  12. $1-$n 当前行的第1-n个字段
  13. NF 当前行字段数 number field
  14. NR 当前行行号,从1开始 number row
  15. FS 输入字段分隔符,默认为空格或者tab field separator
  16. OFS 输出字段分隔符,默认为空格
  17. output field separator
  18. ors 输出行分隔符,默认为回车符
  19. output row separator
  20. printf格式符
  21. %s 字符串
  22. %d 数字
  23. %f 浮点数
  24. 修饰符
  25. + 右对齐
  26. - 左对齐
  27. 默认为右对齐
  28. awk 'BEGIN{FS=":"}{printf "%-20s%20s\n",$1,$NF }'
  29. 实例解释
  30. 执行之前先对字段分割符进行设定为
  31. pattern设置为从第一列到最后一列
  32. 使用printf 进行字符串站位设置,
  33. 20s代表站多少个字节位
  34. awk 'BEGIN{FS=":"}/mail/ {printf "%10s,%20s\n",$4,$5}' passwd
  35. /mail/ pattern,可不写,不写默认处理全局,支持正则
  36. 可以写正则,可以写$0-4之类的取列,可以写运算 ==
  37. $ awk 'BEGIN{FS=":"}{print $(NF-1)}' passwd
  38. 案例解释
  39. 执行之前先对字段分割符进行设定为
  40. pattern未进行设置,默认为全局
  41. 打印 每行数据的倒数第一列
  42. 脚本编写实例
  43. BEGIN{
  44. FS=":"
  45. printf "%-20s%-20s\n" ,"Username","shell"
  46. }
  47. {
  48. if($6 == "/bin" )
  49. {
  50. count ++
  51. printf "%-20s%-20s\n",$1,$NF
  52. }
  53. }
  54. END{
  55. printf "%-20s%-20s\n","Total",count
  56. }
  57. 封装脚本
  58. awk命令过于长的时候,通常采取封装成脚本文件的方法来直接引用文件
  59. 执行文件内部的命令快的方法 具体封装方法如上
  60. 文件命名一般作为 命令的后缀名,awksed之类
  61. 语法中不在使用;进行分割,使用缩进进行分割
  62. '''
  63. 执行的时候
  64. awk -f 脚本名 待处理文件路径即可。