本章内容

抽取文本的工具

  1. 文件内容:lesscat
  2. 文件截取:headtail
  3. 按列抽取:cut
  4. 按关键字抽取:grep
  1. 文件查看
  2. 文件查看命令:cattacrev
  3. cat [OPTION] ...[FILE] ...
  4. -E:显示行结束符$
  5. -n:对显示的每一行进行编号
  6. -A:显示所有控制符
  7. -b:非空行编号
  8. -s:压缩连续的空行成一行
  9. tacrev:倒着输出显示

分页查看文件内容

  1. more:分页查看文件内容
  2. more [OPTIONS...] FILE...
  3. -d:显示翻页及退出提示
  4. less:一页一页地查看文件或STDIN输出
  5. 查看时有用的命令包括: /文本 搜索文本
  6. n/N 跳到下一个或上一个匹配
  7. less 命令是man命令使用的分页器
  1. 显示文本前或后几行内容
  1. head [OPTION] ...[FILE]...
  2.   -c #:指定获取前#字节
  3.   -n #:指定获取前#行
  4.   -#:指定行数
  5. tail [OPTION]...[FILE]...
  6.   -c #:指定获取后#字节
  7.   -n #:指定获取后#行
  8.   -f:跟踪显示文件fd新追加的内容,常用日志监控
  9.     相当于 --follow=descriptor
  10.   -F:跟踪文件名,相当于--follow=name --retry
  11. tailf 类似于tail -f,当文件不增长时并不访问文件

按列抽取文本cut和合并文件paste

  1. cut [OPTION]...[FILE]...
  2. -d DELIMINTER:指明分隔符,默认tab
  3.   -f FILEDS:
  4.     #:第#个字段
  5.     #,#,[,#]:离散的多个字段,例如1,3,6
  6.     #-#:连续的多个字段,例如1-6
  7.   混合使用:1-3,7
  8.   -c 按字符切割
  9.   --output-delimiter=STRING指定输出分隔符
  10.  
  11. 显示文件或STDIN数据的指定列
  12.   示例:cut -d: -f1 /etc/passwd
  13.      cat /etc/passwd | cut -d: -f7
  14.     cut -c2-5 /usr/share/dict/words
  15. paste合并两个文件同行号的列到一行
  16.   paste [OPTION]...[FILE]...
  17.   -d 分隔符:指定分隔符,默认用TAB
  18.   -s:所有行合并成一行显示
  19.   paste f1 f2
  20.   paste -s f1 f2
  21.   paste用法:http://www.runoob.com/linux/linux-comm-paste.html

sort命令:用于将文本文件内容加以排序.  http://www.runoob.com/linux/linux-comm-sort.html

uniq命令:用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用. http://www.runoob.com/linux/linux-comm-uniq.html

wc(word count)命令:用于计算字数 http://www.runoob.com/linux/linux-comm-wc.html

df命令:用于显示目前在Linux系统上的文件系统的磁盘使用情况统计。http://www.runoob.com/linux/linux-comm-df.html

Linux文本处理三剑客

  1. grep:文本过滤(模式:pattern)工具
  2. grepeprepfgrep(不支持正则表达式搜索)
  3. sedstream editor,文本编辑工具
  4. awkLinux上实现gawk,文本报告生成器

grep

  1. grep:Global search REgular expression and Print out the line
  2. 作用:文本搜索工具,根据用户指定的"模式"对文本逐行进行匹配检查;打印匹配到的行
  3. 模式:由正则表达式字符及文本字符所编写的过滤条件。
  4. grep [OPTIONS] PATTERN [FILE...]
  5. grep root /etc/passwd
  6. grep "$USER" /ect/passwd
  7. grep '$USER' /etc/passwd
  8. grep `whoami` /ect/passwd
  9.  
  10. grep命令选项
  11. --color=auto:对匹配到的文本着色显示
  12. -v:显示不被pattern匹配到的行
  13. -i:忽略字符大小写
  14. -n:显示匹配的行号
  15. -o:仅显示匹配到的字符串
  16. -c:统计匹配的行数
  17. -q:静默模式,不输出任何信息  ####配合echo $?命令使用,该命令可用来判断上一个亿命令是否成功,成功输出0,否则非0.
  18. -A #:after,显示后#行
  19. -B #:before,显示前#行
  20. -C #:context,前后各#行
  21. -e:实现多个选项间的逻辑or关系
  22. grep -e 'cat' -e 'dog' file
  23. -w:匹配整个单词
  24. -E:使用ERE
  25. -F:相当于fgrep,不支持正则表达式

正则表达式

  1. REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。
  2. 程序支持:grep,sed,awk,vim,less,nginx,varnish
  3. 分两类:
  4. 基本正则表达式:BRE
  5. 扩展正则表达式:ERE
  6. grep -Eegrep
  7. 正则表达式引擎:采用不同算法,检查处理正则表达式的软件模块
  8. PCREPerl Compatible Regular Expression
  9. 元字符分类:字符匹配、匹配次数、位置锚定、分组
  10. man 7 regex
  11.  
  12. 基本正则表达式字符
  13. 字符匹配:
  14.   . 匹配任意单个字符
  15.   [] 匹配指定范围内的任意单个字符
  16.   [^] 匹配指定范围外的任意单个字符
  17.   [:alnum:] 字母和数字
  18.   [:alpha:] 代表任何英文大小写字符,亦即A-Za-z
  19.  
  20. 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
  1. * 匹配前面的字符任意次,包括0
  2. 贪婪模式:尽可能长的匹配
  3. .* 任意长度的任意字符
  4. \? 匹配前面的字符01
  5. \+ 匹配前面的字符至少1
  6. \{n\} 匹配前面的字符n
  7. \{m,n\} 匹配前面的字符至少m次,至多n
  8. \{,n\} 匹配前面的字符至多n
  9. \{n,\} 匹配前面的字符至少n

 位置锚定

  1. 定位出现的位置
  2. ^行首锚定,用于模式的最左侧
  3. $行尾锚定,用于模式的最右侧
  4. ^PATTERN$,用于模式匹配整行
  5. ^$ 匹配空行
  6. ^[[:space:]]*$空白行
  7. \<\b词首锚定,用于单词模式的左侧
  8. \>\b词尾锚定,用于单词模式的右侧
  9. \<PATTERN>\ 匹配整个单词
  10. 分组:\(\)将一个或多个字符捆绑在一起,当作一个整体进行处理,如\(root\)\+
  11. 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3,...
  12. \1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
  13. 示例:\(string1\+\(string2\)*\)
  14.    \1:string1\+\(string2\)*
  15.    \2:string2
  16. 后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
  17. 或者:\|
  18.   示例:a\|b:ab C\|cat:Ccat \(C\|c\)atCatcat

egrep及扩展的正则表达式

  1. egrep = grep - E
  2. egrep [OPTIONS] PATTERN [FILE...]
  3. 扩展的正则表达式的元字符:
  4. 字符匹配:
  5. .任意单个字符
  6. [] 指定范围的字符
  7. [^] 不在指定范围的字符
  8. 次数匹配:
  9.   *:匹配前面字符任意次
  10.   ?:01
  11.   +:1次或多次
  12.   {m}:匹配m
  13.   {mn}:至少m,至多n
  14. 位置锚定:
  15.   ^:行首
  16.   $:行尾
  17.   \<,\b:词首
  18.   \>,\b:词尾
  19. 分组:
  20.   ()
  21.   后向引用:\1,\2,...
  22. 或者:
  23.   a|b:ab
  24.   C|catCcat
  25.   (C|c)at:Catcat

 Vim简介 http://www.runoob.com/linux/linux-vim.html

  1. viVisual Interface,文本编辑器
  2. 文本:ASCIIUnicode
  3. 文本编辑种类:
  4. 行编辑器:sed
  5. 全屏编辑器:nanovi
  6. vim - Vi Improved
  7. 其他编辑器:
  8. gedit 一个简单的图形编辑器
  9. gvim 一个Vim编辑器的图形版本
  10.  
  11. 打开文件
  12. #vim [OPTION]... FILE...
  13. +#:打开文件后,让光标处于第#行的行首,+默认行尾
  14. +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首
  15. -b file 二进制方式打开文件
  16. -d file1 file2... 比较多个文件
  17. -m file 只读打开文件
  18. ex file vim -e 直接进入ex模式
  19. 如果该文件存在,文件被打开并显示内容
  20. 如果该文件不存在,当编辑后第一次存盘时创建它
  21.  
  22. vim:一个模式编辑器
  23. 击键行为是依赖于vim"模式"
  24. 三种主要模式:
  25. 命令(Normal)模式:默认模式,移动光标,剪切/粘贴文本
  26. 插入(Insert)或编辑模式:修改文本
  27. 扩展命令(extended command)模式(即底线命令模式):保存,退出等
  28. Esc键:退出当前模式
  29. Esc键+Esc键:总是返回到命令模式

模式转换:

  1. 命令模式-->输入模式(插入模式):
  2.   i insert,在光标所在处输入
  3.   I:在当前光标所在行的行首输入
  4.   aappend,在光标所在处后面输入
  5.   A:在当前光标所在行的行尾输入
  6.   o:在当前光标所在行的下方打开一个新行
  7.   O:在当前光标所在行的上方打开一个新行
  8. 输入模式-->命令模式:
  9.   Esc
  10. 命令模式-->底线命令模式(扩展命令模式)
  11.   
  12. 底线命令模式-->命令模式
  13.   Esc键,回车键

 关闭文件

  1. 扩展模式:
  2. :q 退出
  3. :q 强制退出,丢弃做出的修改
  4. :wq 保存退出
  5. :x 保存退出
  6.  
  7. ":"进入扩展命令模式
  8. 创建一个命令提示符:处于底部的屏幕左侧
  9. 命令:
  10.   w  写磁盘文件
  11.   wq  写入并退出
  12.   x  写入并退出
  13.   q  退出
  14.   q! 不存盘退出,即使更改都将丢失
  15.   r filename  读文件内容到当前文件中
  16.   w filename  将当前文件内容写入另一个文件
  17.   command   执行命令
  18.   rcommand  读入命令的输出
  19.   
  20.  
  21. 命令模式
  22. ZZ:保存退出
  23. ZQ:不保存退出
  24.  
  25. 命令模式光标跳转
  26. 字符间跳转:
  27.   h:左 l:右 j:下 k:上
  28.   #COMMAND:跳转由#指定的个数的字符
  29. 单词间的跳转:
  30.   w:下一个单词的词首
  31.   e:下一个单词的词尾
  32.   b:当前或前一个单词的词首
  33.   #COMMAND:由#指定一次跳转的单词数
  34. 当前页跳转:
  35.   H:页首  
  36.   M:页中间行
  37.   L:页底
  38. 行首行尾跳转:
  39.   ^:跳转至行首的第一个非空白字符
  40.   0:跳转至行首
  41.   $:跳转至行尾
  42. 行间移动:
  43.   #G、扩展模式:#:跳转至由#指定行
  44.   G:最后一行
  45.   1Ggg:第一行
  46. 句间移动:
  47.   ):下一句  (:上一句
  48. 段落间移动:
  49.   }:下一段  {:上一段
  50.  
  51. 命令模式操作:
  52.   x:删除光标处的字符
  53.   #x:删除光标处起始的#个字符
  54.   xp:交换光标所在处的字符及其后面的字符的位置
  55.   ~:转换大小写
  56.   J:删除当前行后的换行符
  57. 替换命令(r,replace)
  58.   r:替换光标所在处的字符
  59.   R:切换成REPLACE模式
  60. 删除命令:
  61.   d:删除命令,可结合光标跳转字符,实现范围删除
  62.   d$:删除到行尾
  63.   d^:删除到非空行首
  64.   d0:删除到行首
  65.   dw:删除一个单词
  66.   #COMMAND
  67. dd:删除光标所在的行
  68.   #dd:多行删除
  69. D:从当前光标位置一直删除到行尾,留空行,等同于d$
  70.  
  71. 复制命令(y,yank)
  72.   y:复制,行为类似于d命令
  73.   y$y0,y^等
  74.   yy:复制行
  75.     #yy:复制多行
  76.   Y:复制整行
  77. 粘贴命令(p,paste)
  78.   p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
  79.   P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
  80. 改变命令(c,change):
  81.   c:修改后切换成插入模式
  82. 命令模式-->插入模式
  83.   c$
  84.   c^
  85.   c0
  86. cc:删除当前行并输入新内容,相当于S
  87.   #cc:
  88. C:删除当前光标到行尾,并切换成插入模式
  89.  
  90. 扩展命令模式:地址界定
  91. 地址界定
  92.   start_pos,end_pos
  93.   # 具体第#行,例如2表示第2行
  94.   #,# 从左侧#表示的起始行,加上右侧#表示的行数 示例::2,+3 表示2到5行
  95.   . 当前行
  96.   $ 最后一行  示例: .,$-1 当前行到倒数第二行
  97.   % 全文,相当于1,$
  98.  
  99. /pattern1/,/pattern2/
  100.   从第一次被part1模式匹配到的行开始,一直到第一次被part2匹配到的行结束
  101.   #,/pattern/
  102.   /pattern/,$
  103. 使用方式:后跟一个编辑命令
  104.   d  删除
  105.   y  拷贝
  106.   w file:将范围内的行另存至指定文件中
  107.   r file:在指定位置插入指定文件中的所有内容
  108.   示例: 1,/^f/d 从第一行开始删除到不以f开头的行
  109.  
  110. 扩展命令模式:查找
  111. 查找
  112.   /PATTERN:从当前光标所在处从文件尾部查找
  113.   ?PATTERN:从当前光标所在处向文件首部查找
  114.   n:与命令同方向
  115.   N:与命令反方向
  116. 查找并替换
  117. s:在扩展模式下完成替换操作
  118.   格式:s/要查找的内容/替换为的内容/修饰符
  119.   要查找的内容:可使用模式
  120.   替换为的内容:不能使用模式,但可以使用\1,\2,...等向后引用符号;还可以使用"&"引用前面查找时查找到的整个内容
  121.   修饰符:
  122.     i:忽略大小写
  123.     g:全局替换;默认情况下,每一行只替换第一次出现  
  124.     gc:全局替换,每次替换前询问
  125. 查找替换中的分隔符/可替换为其他字符,例如
  126.   s@/etc@/var/@g
  127.   s#/boot#/#i
  128.  
  129. 命令模式:撤销更改
  130.   u撤销最近的更改
  131.   #u撤销之前多次更改
  132.   U 撤销光标落在这行后所有此行的更改
  133.   Ctrl -r重做最后的"撤销"更改
  134.   .重复前一个操作
  135.   n.重复前一个操作n
  136.  
  137. 可视化模式(类似光标的选择效果)
  138. 允许选择的文本块  
  139.   v 面向字符
  140.   V 面向行
  141.   ctrl -v 面向块
  142. 可视化键可用于与移动键结合使用
  143.   w } 箭头等
  144. 突出显示的文字可被删除、复制、变更、过滤、搜索、替换等
  145.  
  146. 使用多个"窗口"
  147. 多文件分割
  148.   vim -o|-O FILE1 FILE2 ...
  149.   -o:水平分割
  150.   -O:垂直分割
  151.   在窗口切换:Ctrl+w,方向键
  152. 单文件分割
  153.   Ctrl+w,ssplit,上下分割
  154.   Ctrl+w,vvertical,垂直分割
  155.   ctrl+w,q:取消相邻窗口
  156.   ctrl+w,o:取消全部窗口
  157.   wqall 退出

定制vim的工作特性

  1. 配置文件:永久有效
  2. 全局:/etc/vimrc
  3. 个人:~/.vimrc
  4. 扩展模式:当前vim进程有效
  5. 1)行号
  6. 显示:set number,简写为set nu
  7. 取消显示:set nonumber,简写为set nonu
  8. 2)忽略字符的大小写
  9. 启用:set ic
  10. 不忽略:set noic
  11. 3)自动缩进
  12. 启用:set ai
  13. 禁用:set noai
  14. 4)智能缩进
  15. 启用:smartindent 简写 set is
  16. 禁用:set nois
  17. 5)高亮搜索
  18. 启用:set hlsearch
  19. 禁用:set nohlsearch
  20. 6)语法高亮
  21. 启用:syntax on
  22. 禁用:suntax off
  23. 7)显示Tab和换行符^I$显示
  24. 启用:set list
  25. 禁用:set nolist
  26. 8)文件格式
  27. 启用windows格式:set fileformat=dos
  28. 启用unix格式:set fileformat=unix
  29. 简写:set ff=dos|unix  

处理文本的工具sed 

  1. Stream EDitor,行编辑器
  2. sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
    然后读入下行,执行下一个循环。如果没有使诸如'D'的特殊命令,那会在两个循环之间清空模式空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
  3. 功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。
  4. 参考:http://www.gnu.org/software/sed/manual/sed.html
  5. sed用法: sed [option]...'script' inputfile
  6. 常用选项:
  7.   -n:不输出模式空间内容到屏幕,即不自动打印
  8.   -e:多点编辑
  9.   -f:/PATH/SCRIPT_FILE:从指定文件中读取编辑脚本
  10.   -r:支持使用扩展正则表达式
  11.   -i.bak:备份并原处编辑(即会修改源文件)
  12. script'地址+命令'
  13. 地址定界:
  14.   (1)不给地址:对全文进行处理
  15.   (2)单地址:
  16.       #:指定的行,$:最后一行
  17.       /pattern/:被此处模式所能够匹配到的每一行
  18.   (3)地址范围:
  19.       #,#
  20.       #,+#
  21.       /pattern1/,/pattern2/
  22.       #,/pattern1/
  23.   (4)~:步进
  24.       1~2 奇数行
  25.       2~2 偶数行
  26.   
  27. 编辑命令:
  28.   d:删除模式空间匹配的行,并立即启用下一轮循环
  29.   p:打印当前模式空间的内容,追加到默认输出之后
  30.   a [\]text:在指定行后面追加文本(支持使用\n实现追加多行)
  31.   i [\]text:在行前面插入文本
  32.   c [\]text:替换行为为单行或多行文本
  33.   w /path/somefile:保存模式匹配的行至指定文件
  34.   r /path/somefile:读取指定文件的文本至模式空间中,匹配到的行后
  35.   =:为模式空间中的行打印行号
  36.   !:模式空间中匹配行取反处理
  37.   s///:查找替换,支持使用其他分隔符,s@@@,s###
  38.   替换标记:
  39.     g:行内全局替换
  40.     p:显示替换成功的行
  41.     w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中
  42. sed示例:
  43.   sed '2p' /ect/passwd
  44.   sed -n '2p' /etc/passwd
  45.   sed -n '1,4p' /etc/passwd
  46.   sed -n '/root/p' /etc/passwd
  47.   sed -n '2,/root/p' /etc/passwd
  48.   sed -n '/^$/=' file 显示空行行号
  49.   sed -n -e '/^$/p' -e '/^$/=' file
  50.   sed '/root/a\superman' /etc/passwd 行后追加
  51.   sed '/root/i\superman' /etc/passwd 行前追加
  52.   sed '/root/c\superman' /etc/passwd 代替行
  53.   sed '/^$/d' file
  54.   sed '1,10d' file
  55.   nl命令:nl(Number of Lines)将指定的文件添加行号标注后写到标准输出
  56.   nl /etc/passwd | sed '2,5d'
  57.   nl /etc/passwd | sed '2a tea'
  58.   sed 's/test/mytest/g' file
  59.   sed -n 's/root/&superman/p' /etc/passwd 单词前
  60.   sed -n 's/root/superman&/p' /etc/passwd 单词后
  61.   sed -e 's/dog/cat/' -e 's/hi/ih/' pets
  62.   sed -i.bak 's/dog/cat/g' pets
  1.  
  1. 高级编辑命令
  1. 工作模式:模式空间和保持空间介绍
  2. 模式空间:初始化为空,处理完一行后会自动输出到屏幕并清除模式空间。
  3. 保持空间:初始化为一个空行,也就是默认带一个\n,处理完后不会自动清除。 模式空间:可以想成工程里面的流水线,数据之间在它上面进行处理,用于处理文本行。
  4. 保持空间:可以想象成仓库,我们在进行数据处理的时候, 作为数据的暂存区域,用于保留文本行,是保存已经处理过的 输入行,默认有一个空行。
    https://www.cnblogs.com/276815076/p/7879666.html
  1. P:打印模式空间开端至\n内容,并追加到默认输出之前
  2. h:把模式空间中的内容覆盖至保持空间中
  3. H:把模式空间中的内容追加至保持空间中
  4. g:从保持空间取出数据覆盖至模式空间
  5. G:从保持空间追加至模式空间
  6. x:把模式空间中的内容与保持空间中的内容进行互换
  7. n:读取匹配到的行的下一行覆盖至模式空间
  8. N:读取匹配到的行的下一行追加至模式空间
  9. d:删除模式空间中的行
  10. D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会发出d命令那样启动正常的新循环。

高级编辑命令sed示例: 

  1. sed -n 'n;p' FILE
  2. sed '1!G;h;$!d' FILE
  3. sed 'N;D' FILE
  4. sed '$!N;$!D' FILE
  5. sed '$!d' FILE
  6. sed 'G' FILE
  7. sed 'g' FILE
  8. sed '/^$/d;G' FILE
  9. sed 'n;d' FILE
  10. sed -n '1!G;h;$p' FILE

awk介绍

  1. awkAhoWeinbergerKernighan,报告生成器,格式化文本输出
  2. 有多种版本:New awk(nawk),HNU awk(gawk)
  3. gawk:模式扫描和处理语言
  4. 基本用法:
  5. awk [option] 'program' var=value file...
  6. awk [option] -f programfile var=value file...
  7. awk [options] 'BEGIN'{action;...} pattern{action;...} END{action;...}' file...
  8. awk程序通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块,共3部分组成
  9. program通常是被放在单引号或双引号中
  10. 选项:
  11. -F 指明输入时用到的字段分隔符
  12. -v var=value:自定义变量
  13. 基本格式:awk [options] 'program' file...
  14. program:pattern{action statements;..}
  15. pattern和action:
  16.   pattern部分决定动作语句何时触发及触发事件
  17.     BEGIN,END
  18.   action statements对数据进行处理,放在{}内指明
  19.     print,printf
  20. 分隔符、域和记录
  21.   awk执行时,由分隔符分割的字段(域)标记$1,$2..$n称为域标识。$0为所有域,注意:和shell中变量$符含义不同
  22.   文件的每一行称为记录
  23.   省略action,则默认执行print $0的操作
  24.  
  25. awk工作原理
  26. 第一步:执行BEGIN{action;...}语句块中的语句
  27. 第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{action;...}语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
  28. 第三步:当读至输入流末尾时,执行END{action;...}语句块
  29. BAGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中
  30. END语句块在awk从输入流中读取完所有行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块
  31. pattern语句块中的通用命令是最重要的部分,也是可选的。如果没有提供pattern语句块,则默认执行print,即打印每一个读取到的行,awk读取的每一行都会执行该语句块。
  32.  
  33. print格式:print item1,item2,...
  34. 要点:
  35.   (1)逗号分隔符
  36.   (2)输出的各item可以是字符串,也可以是数值;当前记录的字段、变量或awk的表达式
  37.   (3)如省略item,相当于print $0
  38. 示例:
  39.   awk '{print "hello awk"}'  
  40.   awk -F: '{print}' /etc/passwd
  41.   awk -F: 'print "wang"' /etc/passwd
  42.   awk -F: '{print $1}' /etc/passwd
  43.   awk -F: '{print $1"\t"$3}' /etc/passwd
  44.   tail -3 /etc/fstab | awk '{print $2,$4}'
  45.  
  46. awk变量
  47. 变量:内置变量和自定义变量
  48. FS:输入字段分隔符,默认为空白字符
  49.   awk -v FS=':' '{print $1,FS,$3}' /etc/passwd
  50.   awk -F: '{print $1,$3,$7}' /etc/passwd
  51. OFS:输出字段分隔符,默认为空白字符
  52.   awk -v FS=':' -v OFS=':' '{print $1,$3,&7}' /etc/passwd
  53. RS:输入记录分隔符,指定输入时的换行符
  54.   awk -v RS='' '{print}' /etc/passwd
  55. ORS:输出记录分隔符,输出时用指定符号代替换行符
  56.   awk -v RS='' -v ORS='###' '{print}' /etc/passwd
  57. NF:字段数量
  58.   awk -F '{print NF}' /etc/passwd 引用内置变量不用$
  59.   awk -F: '{print $(NF-1)}' /etc/passwd
  60. NR:记录号
  61.   awk '{print NR}' /etc/fstab; awk END '{print NR}' /etc/fstab
  62. FNR:各文件分别计数,记录号
  63.   awk '{print FNR}' /etc/fstab /etc/inittab
  64. FILENAME:当前文件名
  65.   awk '{print FILENAME}' /etc/fstab
  66. ARGC:命令行参数的个数
  67.   awk '{print ARGC}' /etc/fstab /etc/inittab
  68.   awk 'BEGIN {print ARGC}' /etc/fstab /etc/inittab
  69. ARGV:数组,保存的是命令行所给定的各参数
  70.   awk 'BEGIN{print ARGV[0]}' /etc/fstab /etc/inittab
  71.   awk 'BEGIN{print ARGV[1]}' /etc/fstab /etc/inittab
  72.  
  73. 自定义变量(区分字符大小写)
  74.   (1)-v var=value
  75.   (2)在program中直接定义
  76. 示例:
  77.   awk -v test='hello gawk' '{print test}' /etc/fstab
  78.   awk -v test='hello gawk' 'BEGIN{print test}'
  79.   awk 'BEGIN{test="hello,gawk";print test}'
  80.   awk -F: '{sex="male";print $1,sex,age;age=18}' /etc/passwd
  81.   cat awkscript {print script,$1,$2}
  82.   awk -F: -f awkscript /etc/passwd
  83.  
  84. printf命令
  85. 格式化输出:printf "FORMAT",item1,item2,...
  86.   (1)必须指定FORMAT
  87.   (2)不会自动换行,需要显示给出换行控制符
  88.   (3)FORMAT中需要分别为后面的每个item指定格式符
  89. 格式符:与item一一对应
  90.   %c:显示字符的ASCII 
  91.   %d,%i:显示十进制整数
  92.   %e,%E:显示科学计数法数值
  93.   %f:显示为浮点数
  94.   %g,%G:以科学计数法或浮点形式显示数值
  95.   %s:显示字符串
  96.   %u:无符号整数
  97.   %%:显示%自身
  98. 修饰符:
  99.   #[.#]:第一个数字控制显示的宽度;第二个#表示小数点后精度,%3.1f
  100.   -:左对齐(默认右对齐) %-15s
  101.   +:显示数值的正负符号 %+d
  102.  
  103. printf示例
  104.   awk -F: '{printf "%s",$1}' /etc/passwd
  105.   awk -F: '{printf "%s\n",$1}' /etc/passwd
  106.   awk -F: '{printf "%-20s %10d\n",$1,$3}' /etc/passwd
  107.   awk -F: '{printf "Username:%s,UID:%d\n",$1,$3}' /etc/passwd
  108.   awk -F: '{printf "Username:%-15s,UID:%d\n",$1,$3}' /etc/passwd
  109.  
  110. 操作符
  111. 算术操作符:
  112.   x+y,x-y,x*y,x/y,x^y,x%y
  113.   -x:转换为负数
  114.   +x:转换为数值
  115. 字符串操作符:没有符号的操作符,字符串连接
  116. 赋值操作符:
  117.   =,+=,-=,*=,/=,%=,^=
  118.   ++,--
  119. 注意下面语句的不同:
  120.   awk 'BEGIN{i=0;print ++i,i}'
  121.   awk 'BEGIN{i=0;print i++,i}'
  122. 比较操作符:
  123.   ==,!=,>,>=,<,<=
  124. 模式匹配符:
  125.   ~:左边是否和右边匹配包含  !~:是否不匹配
  126. 示例:
  127.   awk -F: '$0 ~ /root/{print $1}' /etc/passwd
  128.   awk '$0 ~ "^root"' /etc/passwd
  129.   awk '$0 !~ /root/ ' /etc/passwd
  130.   awk -F: '$3==0' /etc/passwd
  131.  
  132. 逻辑操作符:与&&,或||,非!
  133. 示例:
  134.   awk -F: '$3>=0 && $3<=1000{print $1}' /etc/passwd
  135.   awk -F: '$3==0 || $3>=1000{print $1}' /etc/passwd
  136.   awk -F: '!($3==0){print $1}' /etc/passwd
  137. 函数调用:function_name(argu1,argu2,...)
  138. 条件表达式(三目表达式):
  139.   selectorif-true-expression:if-false-expression
  140. 示例:
  141.   awk -F '{$3>=1000?usertype="CommonUser":usertype="SystemUser";printf "%15s:%-s\n",$1,usertype}' /etc/passwd
  142. awk PATTERN
  143. PATTERN:根据pattern条件,过滤匹配的行,再做处理
  144. (1)如果未指定:空模式,匹配每一行
  145. (2)/regular expression/:仅处理能够模式匹配到的行,需要用/ /括起来
  146.   awk '/^UUID/{print $1}' /etc/fstab
  147.   awk '!/^UUID{print $1}' /etc/fstab
  148. (3)relational expression:关系表达式,结果为"真"才会被处理
  149.     真:结果为非0值,非空字符串
  150.     假:结果为空字符串或0
  151.   示例:
  152.   awk -F 'i=1,j=1{print i,j}' /etc/passwd
  153.   awk '!0' /etc/passwd;awk '!1' /etc/passwd
  154.   awk -F: '$3>=1000{print $1,$3}' /etc/passwd
  155.   awk -F: '$NF=="/bin/bash"{print $1,$NF}' /etc/passwd
  156.   awk -F: '$NF ~ /bash$/{print $1,$NF}' /etc/passwd
  157. (4)line ranges:行范围
  158.   startlineendline:/pat1/,/pat2/不支持直接给出数字格式
  159.   awk -F: '/^root\>/,/^nobody\>/{print $1}' /etc/passwd
  160.   awk -F: '(NR>=10 && NR<=20){print nr,$1}' /etc/passwd
  161. (5)BEGIN/END模式
  162.   BEGIN{}:仅在开始处理文本中的文本前执行一次
  163.   END{}:仅在文本处理完成之后执行一次
  164.  
  165. 示例:
  166.   awk -F: 'BEGIN{print "USER USERID"}{print $1":"$3} END{print "end file"}' /etc/passwd
  167.   awk -F: '{print "USER USERID";print $1":"$3} END{print "end file"}' /etc/passwd
  168.   awk -F: 'BEGIN{print "USER UID \n----------"}{print $1,$3}' /etc/passwd
  169.   awk -F: 'BEGIN{print "USER UID \n----------"}{print $1,$3}' END{print "========"} /etc/passwd
  170.   seq 10 | awk 'i=0'
  171.   seq 10 | awk 'i=1'
  172.   seq 10 | awk '{i=!i;print i}'
  173.   seq 10 | awk '!(i=!i)'
  174.   seq 10 | awk -v i=1 'i=!i'
  175.  
  176. awk action
  177. 常用的action分类
  178.   (1)Expression:算术,比较表达式等
  179.   (2)Control statementsifwhile
  180.   (3)Compound statements:组合语句
  181.   (4)input statements
  182.   (5)output statements:print
  183.  
  184. awk控制语句
  185.   {statements;...}组合语句
  186.   if(condition){statements;...}
  187.   if(condition){statements;...}else{statements;...}
  188.   while(condition){statements;...}
  189.   do{statements;...}while(condition)
  190.   for(expr1;expr2;expr3){statements;...}
  191.   break
  192.   continue  
  193.   delete array[index]
  194.   delete array
  195.   exit
  196.  
  197. awk控制语句if-else
  198. 语法:if(condition){statements;...}[else statements]
  199.    if(condition1){statement1}else if(condition2){statement2} else{statement3}
  200. 使用场景:对awk取得的整行或某个字段做条件判断
  201. 示例:
  202.   awk -F: '{if($3>=1000) print $1,$3}' /etc/passwd
  203.   awk -F: 'if($NF=="/bin/bash") print $1' /etc/passwd
  204.   awk '{if(NF>5) print $0}' /etc/fstab
  205.   awk -F: '{if($3>=1000){print "Common user:%s\n",$1}else {printf "root or Ststem:%s\n",$1}}' /etc/passwd
  206.   awk -F: '{if($3>=1000) printf "Common user:%s\n",$1;else printf "root or System:%s\n",$1}' /etc/passwd
  207.   df -h | awk -F% '/^\/dev/{print $1}' | awk '$NF>=80{print $1,$5}'
  208.   awk 'BEGIN{test=100;if(test>90){print "Very Good"}else if(test>60){print "good"}}else{print "no pass"}'
  209.  
  210. awk控制语句while
  211. while循环
  212. 语法:while(condition){statement;...}
  213. 条件"真",进入循环;条件"假",退出循环
  214. 使用场景:
  215.   对一行内的多个字段逐一类似处理时使用
  216.   对数组中的各元素逐一处理时使用
  217. 示例:
  218.   awk '/^[[:space:]]*linux16/{i=1;while(i<=NF){print $i,length($i);i++}}' /etc/hrub2.cfg
  219.   awk '/^[[:space:]]*linux16/{i=1;while(i<=NF){if(length($i)>=10){print $i,length($i)};i++}}' /etc/grub2.cfg
  220. awk控制语句do-while
  221. do-while循环
  222. 语法:do{statement;...}while(condition)
  223. 意义:无论条件真假,至少执行一次循环体
  224. 示例:
  225.   awk 'BEGIN{total=0;i=0;do{total +=i;i++}while(i<=100);print total}'
  226.  
  227. awk控制语句for循环
  228. 语法:for(expr1;expr2;expr3){statement;...}
  229. 常见语法:
  230.   for(variable assignment;condition;iteration process)
  231.     {for-body}
  232. 特殊用法:能够遍历数组中的元素
  233.   语法:for(var in array){for-body}
  234. 示例:
  235.   awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++){print $i,length($i)}}' /etc/grub2.cfg
  236.  
  237. awk控制语句 break [n]
  238.        continue [n]
  239. next:
  240.   提前结束对本行处理而直接进入下一行处理(awk自身循环)
  241.   示例:awk -F: '{if($3%2!=0) next;print $1,$3}' /etc/passwd
  242.  
  243. awk数组
  244. 若要遍历数组中的每个元素,要使用for循环
  245. for(var in array){for-body}
  246. 注意:var会遍历array的每个索引
  247. 示例:
  248.   awk 'BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";for(i in weekdays){print weekdays[i]}}'
  249.   netstat -tan|awk '/^tcp/{state[$NF]++} END{for(i in state){print i,state[i]}}'
  250.   awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' /var/log/httpd/access_log
  251.  
  252. awk函数处理
  253. 数值处理:
  254.   rand():返回01之间一个随机数
  255.   示例:awk 'BEGIN{SRAND();FOR(i=1;i<=10;i++)print int(rand()*100)}'
  256. 字符串处理:
  257.   length([s]):返回指定字符串的长度
  258.   sub(r,s,[t]):对t字符串进行搜索r表示的模式匹配的内容,并将第一个匹配的内容替换为s
  259.     echo "2008:08:08 08:08:08" | awk 'sub(/:/,"-",$1)'
  260.   gsub(r,s,[t]):对t字符串进行搜素r表示的模式匹配的内容,并全部替换为s所表示的内容
  261.     echo "2008:08:08 08:08:08" | awk 'gsub(/:/,"-",$0)'
  262.   split(s,array,[r]):以r为分隔符,切割字符串s,并将切割后的结果保存至array所表示的数组中,第一个索引值为1,第二个索引值为2,...
  263.     netstat -tan | awk '/^tcp\>/{split($5,ip,":");count[ip[1]]++} END{for(i in count){print i,count[i]}}'

Linux基础学习笔记4-文本处理的更多相关文章

  1. Linux基础学习笔记2-文件管理和重定向

    本节内容 1)文件系统结构元素 2)创建和查看文件 3)复制.转移和删除文件 4)软和硬链接 5)三种I/O设备 6)把I/O重定向至文件 7)使用管道 文件系统和结构 文件系统 文件和目录被组织成一 ...

  2. Linux基础学习笔记6-SHELL编程

    编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行 编程基本概念: 顺序执行:循环执行:选 ...

  3. Linux基础学习笔记5-软件管理

    包管理器 二进制应用程序的组成部分: 二进制文件.库文件.配置文件.帮助文件 程序包管理器: debian:deb文件.dpkg包管理器 redhat:rpm文件.rpm包管理器 rpm:Redhat ...

  4. Linux基础学习笔记1

    MBR分区 主分区: 1-4,一块硬盘最多四个主分区,对主机必须有,主区可以格式化ntfs,存数据: 扩展分区:1-4,一块硬盘最多一个扩展分区,可以没有扩展分区,划分更小的单元,即逻辑分区: 逻辑分 ...

  5. linux基础学习笔记

    我用的是centOS7.0版本的系统.linux的shell终端窗口类似于wind的command窗口 shell命令提示符格式:用户名@主机名:目录名 提示符 @前面的是已登录的用户名,@之后的为计 ...

  6. Linux基础学习笔记以及常用命令

    1.windows自带命令进入mysql所在磁盘   2.进入mysql安装目录的bin文件 D:\>cd D:\Program Files (x86)\mysql-5.5.25-winx64\ ...

  7. Linux基础学习笔记3-用户权限

    本章内容 用户user 令牌token,identity Linux用户:Uername/UID 管理员:root,0 普通用户:1-65535 系统用户:1-499,1-999(Centos7) 对 ...

  8. 深挖计算机基础:趣谈Linux操作系统学习笔记

    参考极客时间专栏<趣谈Linux操作系统>学习笔记 核心原理篇:内存管理 趣谈Linux操作系统学习笔记:第二十讲 趣谈Linux操作系统学习笔记:第二十一讲 趣谈Linux操作系统学习笔 ...

  9. linux 驱动学习笔记01--Linux 内核的编译

    由于用的学习材料是<linux设备驱动开发详解(第二版)>,所以linux驱动学习笔记大部分文字描述来自于这本书,学习笔记系列用于自己学习理解的一种查阅和复习方式. #make confi ...

随机推荐

  1. 十大PHP程序员必备工具

    十大PHP程序员必备工具 1.Notepad++ 总结来说就是小而精,7.4版本的软件包只有2.9M,比一般的IDE小数十倍,但是Notepad++的功能确是很全面的,代码高亮,语法折叠,宏功能,内置 ...

  2. Python 带参数的装饰器 [2] 函数参数类型检查

    在Python中,不知道函数参数类型是一个很正常的事情,特别是在一个大项目里.我见过有些项目里,每一个函数体的前十几行都在检查参数类型,这实在是太麻烦了.而且一旦参数有改动,这部分也需要改动.下面我们 ...

  3. ASP.NET API Helper Page 创建并生成相关帮助文档

    创建API项目 修改原工程文件,该行为是为了避免和引入第三方API工程文件冲突 修改发布设置 引入需要生成文档的相关文件,将第三方API依赖的相关文件(XML文件非常重要,是注释显示的关键),复制到文 ...

  4. 视觉机器学习------KNN学习

    KNN(K-Nearest Neighbor algorithm, K最近邻方法)是一种统计分类器,属于惰性学习. 基本思想:输入没有标签即未经分类的新数据,首先提取新数据的特征并与测试集中的每一个数 ...

  5. 前向星&链式前向星

    参考博文: https://blog.csdn.net/acdreamers/article/details/16902023 前向星 len[i]以i为起点的边在数组中的存储长度 head[i]以i ...

  6. [MicroPython]TurniBit开发板旋转按钮控制脱机摆动

    一.实验目的: ?学习在PC机系统中扩展简单I/O 接口的方法 ?学习TurnipBit拼插编程 ?了解舵机工作原理 ?学习TurnipBit扩展板舵机和旋转按钮接线方式 二.所需原器件: ?Turn ...

  7. Java中volatile关键字解析

    一.内存模型的相关概念 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入.由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存 ...

  8. 2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(数据库简单说明)

    1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(视频总揽) 这里有个教程   http://www.cnblogs.com/best/p/6517755.h ...

  9. Gym101194J Mr.Panda and TubeMaster 二分图、费用流

    传送门 看到这张图,是一个网格图,而且有回路限制,不难想到黑白染色. 一般来说我们对一张图黑白染色之后都是黑色点向白色点连边,但是这道题往这边想似乎就想不出建图方法了,因为"一个格子强制流满 ...

  10. 剑指offer 第十一天

    46.扑克牌顺子 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的 ...