grep、sed、awk个人备忘(补充中)
声明:个人整理+参考博文!
参考文章如下:
《详细grep、sed、awk》:https://www.cnblogs.com/caicairui/p/8616845.html
目录
1. grep
2. sed
2.1 语法说明
流编辑器,过滤和替换文本。
工作原理:sed命令将当前处理的行读入模式空间进行处理,处理完把结果输出,并清空模式空间。然后再将下一行读入模式空间进行处理输出,以此类推,直至最后一行。
用法:sed [OPTION]... {script-only-if-no-other-script} [input-file]...
sed [选项] '地址 命令' file
选项 | 描述 |
-n | 不打印模式空间 |
-e | 执行脚本-表达式来处理 |
-f | 脚本文件的内容添加到命令被执行 |
-i | 修改源文件 |
-r | 使用扩展正则表达式 |
命令 | m描述 |
s/regexp/replacement/ | t替换字符串 |
p | d打印当前模式空间 |
P | d打印模式空间的第一行 |
d | s删除模式空间,并且开始下一个循环 |
D | s删除模式空间的第一行,开始下一个循环 |
= | d打印当前行号 |
a \text | d当前行追加文本 |
i \text | d当前行上面插入文本 |
c \text | s所选行替换文本 |
q | l立即退出sed脚本 |
r | z追加文本来自文件 |
地址 | m描述 |
first~step | b步长,每step行,从first开始 |
$ | p匹配最后一行 |
/regexp/ | z正则表达式匹配行 |
number | z只匹配制定行 |
addr1、addr2 | k开始匹配addr1开始,直接addr2行结束 |
addr1,+N | c从addr1行开始,向后的N行 |
addr1,~N | c从addr1行开始,到N行结束 |
3. awk
3.1 语法说明
awk是一个处理文本的编程语言工具,能用简短的程序处理输入文件、数据排序、计算以及生产报表等等。
在Linux系统下默认awk是gawk,它是awk的GUN版本。可以通过命令查看应用的版本:ll /bin/awk
基本的命令语法:awk option 'patten {action}' file
其中pattern表示AWK在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令。花括号用于根据特定的模式对一系列指令进行分组。
pattern参数可以是egrep正则表达式的任意一个,使用/re/再加上一些样式匹配,匹配方式与sed类似,也可以使用“,”分开两样式以选个某个范围。
awk处理的工作方式与数据库类似,支持对记录和字段处理,这也是grep和sed不能实现的。
在awk中,缺省的情况下将文本文件中一行视为一个记录,而将一行中的某一部分作为记录中的一个字段,用1,2,3....数字的方式顺序的表示行(记录)中的不同字段。用$后跟数字,引用对应的字段,以逗号分割,0表示整个行。
选项 | m描述 |
-f program-file | c从文件中读取awk程序源文件 |
-F fs | z指定fs为输入字段分隔符 |
-v var=value | b变量赋值 |
--posix | z只支持POSIX正则表达式 |
Pattern | Description |
BEGIN{ } | g给程序赋予初始状态,先执行的工作 |
END{ } | c程序结束之后执行的一些扫尾工作 |
/regular expression/ | w为每个输入记录匹配正则表达式 |
pattern && pattern | l逻辑and,满足两个模式 |
pattern || pattern |
逻辑或,满足其中一个模式 |
! pattern | l逻辑非,不满足模式 |
pattern1,pattern2 | f范围模式,匹配所以1的记录,直到匹配到模式2 |
3.2 疑问点
1.
Q:如下-F"[ ,]+" 什么含义?
[[email protected]_0_7_centos tmp]
# cat test
I am cai,my qq is
[[email protected]_0_7_centos tmp]
# awk -F"[ ,]+" '{print $3" "$6}' test
cai is
A:见如下正则表达式说明中[]和+
也即以一个或多个"空格"或","做为字段分隔符。