跟老韩学Linux自动化运维(基础篇)_韩艳威 编著_AZW3_MOBI_EPUB_PDF_电子书(无页码)_韩艳威 编著
内容节选
3.4awk与正则表达式 awk是一款优良的文本处理工具,同时也是一个报告生成器,它拥有强大的文本格式化的能力,可以进行正则表达式的匹配、流程控制、数学运算,具备一个完整的语言应具备的多数特性。 awk脚本通常由3部分组成,即BEGIN、END和带模式匹配选项的常见语句块。这3个部分都是可选项,在脚本中可省略任意部分。 3.4.1 awk语法与基本指令 1.awk工作模式 执行awk时,它会反复进行下列4个步骤。 (1)自动从指定的数据文件中读取一个数据行。 (2)自动更新(Update)相关的内建变量(NF、NR、$0等变量)的值。 (3)依次执行程序中所有的Pattern { Actions }指令。 (4)当执行完程序中所有Pattern { Actions }指令时,若数据文件中还有未读取的数据,则重复执行步骤(1)到步骤(3)。 awk默认将处理结果输出至标准输出,如果不指定输入文件,则使用标准输入,awk标准输入选项如表3-6所示。 表3-6 awk标准输入选项 选项说明 -F指定输入字段(列)分隔符 -f使用脚本文件 awk语法格式如表3-7所示。 表3-7 awk语法格式 语法格式说明 BEGIN在读取数据之前处理指令 pattern匹配模式 {commands}处理指令,可能多行 END在读取所有数据结束之后处理指令 最简单的操作,既没有patter,也没有选项,代码如下。1 [root@lamp_0_16 awk]# echo 跟老韩学Python > laohan_python.log 2 [root@lamp_0_16 awk]# awk '{print}' laohan_python.log 3 跟老韩学Python 上述代码中第1行表示将“跟老韩学Python”字符串输入laohan_python.log文件中。 第2行输出laohan_python.log文件中的内容,第3行为匹配输出结果。 2.awk基础语法 awk语法格式说明如下。 ● 格式1:前置指令 | awk [选项] '条件{编辑指令}'。 ● 格式2:awk [选项] '条件{编辑指令}' 文件。 选项表示awk在数据中查找的内容。 编辑指令如果包含多条语句时,可以用分号分隔,处理文本时,若未指定分隔符,则默认将空格、制表符等作为分隔符。print是常见的指令,常用指令选项如下。 ● -F:指定分隔符,可省略(默认分隔符为空格)。 ● -V:调用外部Shell变量。 3.awk内置变量与动作 awk内置变量如表3-8所示。 表3-8 awk内置变量 内置变量说明 $0整行内容 $nn为正整数,代表第n个字段(列)的内容 $1~$n当前行的第1~n个字段 NF当前行的字段个数,从1开始计数 NR当前行的行号,从1开始计数 FNR多文件处理时,每个文件行号单独计数,都从0开始 FS输入字段分隔符 RS指定行分隔符 OFS输出字段分隔符,默认为空格 ORS输出字段分隔符,默认为换行符 FILENAME当前输入的文件名 ARGC指令行参数个数 ARGV指令行参数数组 awk常用动作如表3-9所示。 表3-9 awk常用动作 动作说明 print输出内容(默认值) printf格式化输出内容 awk修饰符如表3-10所示。 表3-10 awk修饰符 修饰符说明 +右对齐 −左对齐 #显示八进制数在前面加0,显示十六进制数在前面加0x awk模式匹配如表3-11所示。 表3-11 awk模式匹配 模式匹配说明 RegExp按正则表达式匹配 关系运算按关系运算匹配 4.print()和printf() awk中同时提供了print()和printf()两种输出的函数。 print()函数的参数可以是变量、数值或者字符串。字符串必须用双引号标注,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。 printf()函数,其用法和C语言中printf语法相似,可以格式化字符串,输出复杂数据条目时,printf()更加好用,代码更易阅读。 printf()常用格式符如表3-12所示。 表3-12 printf()常用格式符 格式符说明 %s输出字符串 %d输出十进制数 %f输出一个浮点数 %x输出十六进制数 %o输出八进制数 %e输出数字的科学记数法形式 %c输出单个字符的ASCII print()进行输出,默认输出每行内容,用“Enter”键换行。使用printf()(默认没有加任何输出分隔符)进行格式化输出,代码如下。1 [root@lamp_0_16 awk]# cat printf.sh2 #!/bin/bash34 printf "%-10s %-8s %-4s\n" 姓名......
- 信息
- 内容提要
- 前言
- 第1章 Shell脚本编程入门
- 1.1 熟练掌握Linux指令的重要性
- 1.2 Shell的基本概念
- 1.3 Shell脚本注释
- 1.4 Shell脚本调试
- 1.5 掌握Shell编程
- 1.6 Shell编程特性
- 1.7 Shell脚本运维实战
- 1.8 Linux清空文件内容的6种方法
- 1.9 Shell编程实用指令
- 1.10 Shell编程中的特殊字符
- 1.11 本章练习
- 1.12 编写Shell脚本经验
- 1.13 本章总结
- 第2章 Shell变量与字符串
- 2.1 Shell基础知识
- 2.2 Shell变量与运算符
- 2.3 Shell变量高级知识
- 2.4 Shell运算符
- 2.5 Shell编程之特殊符号
- 2.6 Shell编程之字符串常用操作
- 2.7 Shell指令替换与数学运算
- 2.8 本章练习
- 2.9 本章总结
- 第3章 Shell正则表达式与文本处理三剑客
- 3.1 正则表达式基础
- 3.2 grep与正则表达式
- 3.3 sed与正则表达式
- 3.4 awk与正则表达式
- 3.5 awk数组与运算符
- 3.6 本章总结
- 第4章 Shell编程之文件查找与处理
- 4.1 find与正则表达式
- 4.2 文本处理指令
- 4.3 本章练习
- 4.4 本章总结
- 第5章 Shell条件测试和循环语句
- 5.1 Shell编程之字符串精讲
- 5.2 Shell条件测试和表达式
- 5.3 Shell流程控制
- 5.4 Shell循环
- 5.5 循环控制语句
- 5.6 本章练习
- 5.7 本章总结
- 第6章 Shell数组与函数
- 6.1 Shell数组的定义和赋值
- 6.2 访问和删除数组
- 6.3 Shell函数
- 6.4 本章练习
- 6.5 本章总结
- 第7章 Linux自动化运维入门
- 7.1 SSH服务基础精讲
- 7.2 OpenSSH服务详解
- 7.3 SSH自动化运维精讲
- 7.4 自动化运维工具之pssh
- 7.5 自动化运维工具之rsync
- 7.6 定时任务与发送邮件
- 7.7 crontab基础知识
- 7.8 使用Mutt发送邮件
- 7.9 本章练习
- 7.10 本章总结