摘要: BEGIN 与 END 这两个特殊的“模式”,它们提供的 awk 程序起始(startup)与清除(cleanup)操作,常见于大型 awk 程序中,且通常写在个别文件里,而不是命令行上: BEGIN { 起始操作程序代码(startup code)} pattern1 { action1 } pa 阅读全文
posted @ 2019-01-23 10:06 Avention 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 如需从输入的数据文件中取出特定的文本行,主要的工具为 grep 程序。POSIX 采用三种不同 grep 变体:grep、egrep 与 fgrep 的功能,整合为单个版本,通过不同的选项,分别提供这三种行为模式。 虽然可以直接查找字符串常数,但是正则表达式能提供一个功能更强大的方式,描述你要找的文 阅读全文
posted @ 2019-01-23 10:06 Avention 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 在一些简单程序中,你可以使用 -F 选项修改字段分隔字符。显示 /etc/passwd 文件里的用户名称与全名,你可以使用: awk -F: '{ print $1,$5 }' /etc/passwd -F 选项会自动地设置 FS 变量。请注意,程序不必直接参照 FS 变量,也不用必须管理读取的记录 阅读全文
posted @ 2019-01-23 10:05 Avention 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 就像我们已经介绍过的:大多数时候,你只是想把选定的字段显示出来,或者重新安排其顺序。简单的打印可使用 print 语句做到,只要提供给它需要打印的字段列表,变量或字符串即可: awk -F: '{ print "User", $1 , "is really", $5}' /etc/passwd 简单 阅读全文
posted @ 2019-01-23 10:05 Avention 阅读(87) 评论(0) 推荐(0) 编辑
摘要: awk 的基本模式不同于绝大多数的程序语言。它其实比较类似于 sed: awk 'program' [ file ... ] awk 读取命令行上所指定的各个文件(若无,则为标准输入),一次读取一条记录(行)。再针对每一行,应用程序所指定的命令。awk 程序基本架构为: pattern { acti 阅读全文
posted @ 2019-01-23 10:04 Avention 阅读(104) 评论(0) 推荐(0) 编辑
摘要: awk 设计的重点就在字段与记录上:awk 读取输入记录(通常是一些行),然后自动将各个记录切分为字段。awk 将每条记录呃逆的字段数目,存储到内建变量 NF。 默认以空白分隔字段--例如空格与制表字符(或两者混用),像 join 那样。这通常就足够使用了,不过,其实还有其他选择:你可以将 FS 变 阅读全文
posted @ 2019-01-23 10:04 Avention 阅读(109) 评论(0) 推荐(0) 编辑
摘要: join 命令可以将多个文件结合在一起,每个文件里的每条记录,都共享一个键值(key),键值指的是记录中的主字段,通常会是用户名称、个人姓氏、员工编号之类的数据。举例来说,两个文件,一个列出所有业务员销售业绩,一个列出每个业务员应该实现的业绩: #业务员 量 joe 100 jane 200 her 阅读全文
posted @ 2019-01-23 10:03 Avention 阅读(344) 评论(0) 推荐(0) 编辑
摘要: awk 本身所提供的功能完备,已经是一个很好用的程序语言了。以后会好好地介绍该语言的精髓。虽然 awk 能做的事很多,但它主要的设计是要在 Shell脚本中发挥所长:做一些简单的文本处理,例如取出字段并重新编排这一类。接下来将介绍 awk 的基本概念,随后你看到这样的“单命令行程序(one-line 阅读全文
posted @ 2019-01-23 10:03 Avention 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 由于 UNIX 鼓励使用文本型数据,因此系统上最常见的数据存储类型就是文本了,在文本文件下,一行表示一条记录。这里要介绍的是在一行内用来分隔字段的两种惯例。首先是直接使用空白(whitespace),也就是用空格键(space)或制表(tab)键: #字符起始的行表示注释,可忽略(这是一般的习惯,注 阅读全文
posted @ 2019-01-23 10:02 Avention 阅读(185) 评论(0) 推荐(0) 编辑
摘要: cut 命令是用来剪下文本文件里的数据,文本文件可以是字段类型或是字符类型。后一种数据类型在遇到需要从文件里剪下特定的列时,特别方便。请注意:一个制表字符在此被视为单个字符。 举例来说,下面的命令可显示系统上每个用户的登录名及其全名: [root@avention etc]# cut -d : -f 阅读全文
posted @ 2019-01-23 10:02 Avention 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 了解行(line)与字符串(string)的差异是相当重要的。大部分简易程序都是处理输入数据的行,像 grep 与 egrep,以及 sed 大部分的工作(99%)都是这样。在这些情况下,不会有内嵌的换行符出现在将要匹配的数据中,^与$则分别表示行的开头与结尾。 然而,对可应用正则表达式的程序语言, 阅读全文
posted @ 2019-01-23 10:01 Avention 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 很多的应用程序,会将数据视为记录与字段的结合,以便于处理。一条记录(record)指的是相关信息的单个集合,例如以企业来说,记录可能含有顾客、供应商以及员工等数据,以学校机构来说,则可能有学生数据。而字段(field)指的就是记录的组成部分,例如姓、名或者街道地址。 阅读全文
posted @ 2019-01-23 10:01 Avention 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 有个问题我们一直没讨论到:有多少文本会匹配 ?事实上,这应该包含两个问题。第二个问题:从哪开始匹配?执行简单的文本查找,例如使用 grep 或 egrep 时,则这两个问题都不重要,你只要知道是否有一行是匹配的,若有,则看看那一行是什么。至于在这个行里,是从哪儿开始匹配,或者它扩展到哪里,已经不重要 阅读全文
posted @ 2019-01-23 09:13 Avention 阅读(158) 评论(0) 推荐(0) 编辑
摘要: -n 选项修改了 sed 的默认行为。当提供此选项时,sed 将不会在操作完成后打印模式空间的最后内容。反之,若在脚本里使用 p,则会明白地将此行显示出来。举例来说,我们可以这样模拟 grep : sed -n '/<HTML>/p' *.html 仅显示<HTML>这行 [many@aventio 阅读全文
posted @ 2019-01-23 09:12 Avention 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 如前所述,sed 默认的会将每一个编辑命令(editing command)应用到每个输入行。而现在我们要告诉你的是:还可以限制一条命令要应用到哪些行,只要在命令前置一个地址(address)即可。因此,sed 命令的完整形式是: address command 行编号 可以使用绝对的行编号作为地址 阅读全文
posted @ 2019-01-23 09:12 Avention 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 先前已经提过,除斜杠还可以使用其他任意字符作为定界符;在正则表达式或替代文本里,也能转义定界符,不过这么做可能会让命令变得很难看懂: sed 's/\/home\/tolstoy\//\/home\/.lt\//' 在前面的3.2.2节里,我们已经讲到 POSIX 的 BRE 时,已说明后向引用在正 阅读全文
posted @ 2019-01-23 09:11 Avention 阅读(133) 评论(0) 推荐(0) 编辑
摘要: sed 的工作方式相当直接。命令行上的每个文件会依次打开与读取。如果没有文件,则使用标准输入,文件名“-”(单个破折号)可用于表示标准输入。 [many@avention Desktop]$ sed 's/hello/HELLO/' - hello world 输入 HELLO world 输出 s 阅读全文
posted @ 2019-01-23 09:11 Avention 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 很多 Shell 脚本的工作都从通过 grep 或 egrep 取出所需的文本开始。正则表达式查找的最初结果,往往就成了要拿来做进一步处理的“原始数据”。通常,文本替换至少需要做意见事,就是将一些字以另一些字取代,或者是删除匹配行的某个部分。 一般来说,执行文本替换的正确程序应该是 sed--流编辑 阅读全文
posted @ 2019-01-23 09:10 Avention 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 你可能会常在管道(pipeline)中间使用 sed,以执行替换操作。做法是使用 s 命令--要求正则表达式寻找,用替代文本替换匹配的文本,以及可选用的标志: sed 's/:.*//' /etc/passwd/ | sort -u 删除第一个冒号之后的所有东西,排序列表并删除重复部分 sed 语法 阅读全文
posted @ 2019-01-23 09:10 Avention 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 很多程序提供正则表达式语法扩展。这类扩展大多采取反斜杠加一个字符,以形成新的运算符。类似 POSIX BRE 里 \( \) 与 \{ \} 的反斜杠。 最常见的扩展为 \< 与 \> 运算符,分别匹配 “单词 word”的开头与结尾。单词是由字母、数字、及下划线组成的。我们称这类字符为单词组成。 阅读全文
posted @ 2019-01-23 09:09 Avention 阅读(185) 评论(0) 推荐(0) 编辑