标签:expression 程序语言 linux action 表达式
一.awk
1.什么是awk
awk 是一种程序语言. 它具有一般程序语言常见的功能。
因awk语言具有某些特点, 如 : 使用直译器(Interpreter)不需先行编译; 变量无类型之分(Typeless), 可使用文字当数组的下标(Associative Array)...等特色. 因此, 使用awk撰写程序比起使用其它语言更简洁便利且节省时间. awk还具有一些内建功能, 使得awk善于处理具数据行(Record), 字段(Field)型态的资料; 此外, awk内建有pipe的功能, 可将处理中的数据传送给外部的 Shell命令加以处理, 再将Shell命令处理后的数据传回awk程序, 这个特点也使得awk程序很容易使用系统资源。
2.awk语法
SYNOPSIS
awk [options] ‘program‘ file file ...
awk [options] ‘PATTERN{action}‘ file file ...
注:linux版本的awk为一个软链接,链接到gawk
Pattern:一般常使用 "关系表达式"(Relational expression) 来充当
Actions:是由许多awk指令构成 包含:print, printf
3.awk内建变量
变量名 | 变量说明 |
$0 | 整个一行 |
$1 | 第一个字段 |
$2 | 第二个字段 |
NF | 字段数 |
NR | 行数,所有文件的一并计数 |
FNR | 行数,各文件分别计数 |
ARGV | 数组,保存命令本身这个字符 |
ARGC | 保存awk命令中参数的个数 |
FILENAME | 正在处理的当前文件的名称 |
自定义变量:
-v VAR_NAME=VALUE
变量名区分字符大小写;
(1) 可以program中定义变量;
(2) 可以命令行中通过-v选项自定义变量;
4.printf
命令的使用格式:printf format, item1, item2,...
(1) 要指定format;
(2) 不会自动换行;如需换行则需要给出\n
(3) format用于为后面的每个item指定其输出格式;
format格式的指示符都%开头,后跟一个字符:
%c: 显示字符的ASCII码;
%d, %i: 十进制整数;
%e, %E: 科学计数法显示数值;
%f: 显示浮点数;
%g, %G: 以科学计数法格式或浮点数格式显示数值;
%s: 显示字符串;
%u: 显示无符号整数;
%%: 显示%自身;
修饰符:
#:显示宽度
-:左对齐
+:显示数值的符号
.#: 取值精度
例
5.awk输出重定向
将awk输出的结果直接写入文件
print items > output-file
print items >> output-file
6.模式
(1) Regexp: 格式为/PATTERN/
仅处理被/PATTERN/匹配到的行;
(2) Expression: 表达式,其结果为非0或非空字符串时满足条件;
仅处理满足条件的行;
(3) Ranges: 行范围,此前地址定界,
NR
仅处理范围内的行
(4) BEGIN/END: 特殊模式,仅在awk命令的program运行之前(BEGIN)或运行之后(END)执行一次;
(5) Empty:空模式,匹配任意行;
例
7.
action
(1) Expressions
(2) Control statements
(3) Compound statements
(4) input statements
(5) output statements
8.控制语句
if—else
格式:if (condition) {then body} else {else body}
while
格式:while (condition) {while body}
注:没有设置结束条件容易产生死循环
do-while循环
格式:do {do-while body} while (condition)
for循环
格式:for (variable assignment; condition; iteration process) {for body}
case语句
语法:switch (expression) {case VALUE or /RGEEXP/: statement1;... default: stementN}
二.sed
1.sed简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
2.sed语法
sed [options] ‘command‘ file(s)
sed [options] -f scriptfile file(s)
3. 元字符集
^:锚定行的开始 如:/^sed/匹配所有以sed开头的行。
$:锚定行的结束 如:/sed$/匹配所有以sed结尾的行。
.:匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。
*:匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[]:匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。
[^]:匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
\(..\):保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
&:保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\< :锚定单词的开始,如:/\<love/匹配包含以love开头的单词的行。
\> :锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\} :重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。
x\{m,\} :重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。
x\{m,n\} :重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。
4.vim编辑中文本的查找替换:
地址定界s/要查找的内容/替换为的内容/
要查找的内容:可使用正则表达式
替换为的内容:不支持正则表达式,但支持引用前面正则表达式分组中的内容
地址定界:%, startline,endline
5.sed工作机制
每次读取一行文本至“模式空间(pattern space)”中,在模式空间中完成处理;将处理结果输出至标准输出设备;
-r: 支持扩展正则表达式;
-n: 静默模式;
-e script1 -e script2 -e script3:指定多脚本运行;
-f /path/to/script_file:从指定的文件中读取脚本并运行;
-i: 直接修改源文件;
6.sed编辑命令
d 删除
s 替换 %为全部文件
i 插入,直接编辑文件
a 附加
7.练习
(1) 删除/boot/grub/grub.conf文件中所有行的行首的空白字符;
(2) 删除/etc/fstab文件中所有以#开头,后跟至少一个空白字符的行的行首的#和空白字符;
(3) 把/etc/fstab文件的奇数行另存为/tmp/fstab.3;
(4) echo一个文件路径给sed命令,取出其基名;进一步地,取出其路径名;
跟马哥学linux (lesson 8)awk & sed功能总结
标签:expression 程序语言 linux action 表达式
原文地址:http://7280780.blog.51cto.com/7270780/1697431