### Shell编程知识点详解 #### 一、awk用法 **1.1 awk命令简介** - **功能**: `awk` 是一款强大的文本处理工具,在 shell 编程或命令中经常被用来处理文本数据,如格式化报文或从大型文本文件中抽取特定的数据包。 - **特点**: `awk` 作为一种解释型编程语言,可以处理复杂的文本处理任务。它通常被认为是 shell 过滤工具中最难掌握的工具之一。 - **用途**: 结合 `awk`, `sed` 和 `grep` 可以使文本处理工作变得更加高效和简单。 **1.2 awk使用方式** - **基本格式**: `awk [-F field-separator] 'commands' input-file(s)` - **管道操作**: `command | awk [-F field-separator] 'commands'` - **解释**: `-F` 用于指定字段分隔符;`commands` 是要执行的一系列操作;`input-file(s)` 是待处理的文件或文件列表。 **1.3 awk模式与动作** - **模式**: 决定了动作语句何时以及如何触发。如果省略了模式部分,动作语句将始终被执行。 - **动作**: 指定在匹配模式时要执行的具体操作。 - **特殊字段**: - `BEGIN`: 在处理任何输入之前执行的动作。 - `END`: 在处理完所有输入之后执行的动作。 - **示例**: `{ print "Hello, World!" }` 表示打印出 "Hello, World!"。 **1.4 awk域和记录** - **域**: `awk` 在执行时会将每一行分为多个域(字段),默认情况下每个域由空白字符(如空格或制表符)分隔。 - **记录**: 每一行被视为一个记录。 - **域标识**: 使用 `$1`, `$2`, ... `$n` 来表示各域,其中 `$0` 表示整个记录。 **1.5 awk域分隔符** - **默认分隔符**: 默认情况下,域之间的分隔符为空白字符。 - **指定分隔符**: 可以通过 `-F` 选项或者 `FS` 内置变量来指定其他分隔符。 - **示例**: `awk -F "|" '{ print $1 }' file.txt` 将使用 `|` 作为分隔符,并打印出第一列。 **1.6 awk内置变量** - **ARGC**: 命令行参数的数量。 - **ARGV**: 命令行参数的列表。 - **ENVIRON**: 支持使用系统环境变量。 - **FILENAME**: 正在处理的文件名称。 - **FNR**: 当前文件中的记录计数。 - **FS**: 设置输入域的分隔符。 - **NF**: 当前行的域数量。 - **NR**: 已经读取的记录总数。 - **OFS**: 输出域分隔符。 - **ORS**: 输出记录分隔符。 - **RS**: 记录分隔符。 **1.7 awk实例** - **匹配特定模式**: `awk -F "|" '{ if ($2 ~ /b2/) print $0 }' file.txt` 可以查找第二列包含 "b2" 的行。 - **使用变量**: `awk -F "|" '{ print $NF "------" NF }' file.txt` 打印最后一列以及该行的域数量。 - **算术运算**: `awk -F "|" '{ sum += $3 } END { print sum }' file.txt` 计算第三列所有数值的总和。 #### 二、sed用法 虽然提供的内容中没有详细说明 `sed` 的用法,但考虑到 `sed` 与 `awk` 同样是 shell 编程中的重要工具,这里简要介绍 `sed` 的一些基本概念和用法。 **2.1 sed简介** - **功能**: `sed` (stream editor) 是一种用于文本流编辑的工具。 - **用途**: 主要用于自动化文本编辑任务,例如替换文本、删除行等。 - **基本格式**: `sed 'command' filename` **2.2 sed基本命令** - **替换**: `s/old/new/g` 替换行中的文本。 - **删除**: `d` 删除当前行。 - **插入**: `i\New line` 在当前行前插入新行。 - **追加**: `a\New line` 在当前行后添加新行。 - **输出**: `p` 打印当前行。 **2.3 sed高级用法** - **模式匹配**: `sed '/pattern/commands'` 根据模式匹配执行命令。 - **多行操作**: `sed ':label;N;$!b label;s/pattern/replacement/g'` 处理跨多行的模式匹配。 #### 三、shell编程基础 shell 编程涉及编写 shell 脚本来自动执行一系列命令。下面简要概述一些 shell 编程的基础概念: - **变量**: 定义和使用变量来存储数据。 - **条件判断**: 使用 `if` 语句来根据条件执行不同的代码块。 - **循环结构**: 使用 `for` 或 `while` 循环来重复执行一段代码。 - **函数**: 创建可重用的函数来封装复杂的逻辑。 #### 四、脚本调试 - **调试技巧**: 使用 `set -x` 来追踪脚本的执行过程。 - **错误处理**: 通过检查命令的退出状态来处理错误。 #### 五、符号`<<`及`()`的用法 - **符号 `<<`**: 用于创建 [here document](https://en.wikipedia.org/wiki/Here_document),允许将多行文本作为命令的标准输入。 - **符号 `()`**: 用于创建子 shell,可以在其中运行一组命令而不影响父 shell 的环境。 #### 六、脚本实例分析 - **实例**: 分析一个具体的 shell 脚本,理解其功能和实现方法。 以上内容概括了从给定文件的标题、描述、标签和部分内容中提取的关键知识点。希望这些信息能够帮助初学者更好地理解和掌握 shell 编程的基本概念和技术。
剩余57页未读,继续阅读
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 使用NetBeans连接SQLserver2008数据库教程中文WORD版最新版本
- XPath实例中文WORD版最新版本
- XPath语法规则中文WORD版最新版本
- XPath入门教程中文WORD版最新版本
- ORACLE数据库管理系统体系结构中文WORD版最新版本
- Sybase数据库安装以及新建数据库中文WORD版最新版本
- tomcat6.0配置oracle数据库连接池中文WORD版最新版本
- hibernate连接oracle数据库中文WORD版最新版本
- MyEclipse连接MySQL的方法中文WORD版最新版本
- MyEclipse中配置Hibernate连接Oracle中文WORD版最新版本
评论0