LINUXLinuxLinux.命令

Linux4-文本处理三驾马车:grep, sed, awk

2021-08-05  本文已影响0人  Hayley笔记

Linux基础课程系列:


1. grep

grep:一种强大的文本搜索工具,它能使用正则表达式匹配模式搜索文本,并把匹配的行打印出来
格式:grep [options] pattern file ([]内的部分可以省略)

常见参数 含义
-w word 精确查找某个关键词pattern
-c 统计匹配成功的行的数量
-v 反向选择,即输出没有没有匹配的行
-n 显示匹配成功的行所在的行号
-r 从目录中查找pattern
-e 指定多个匹配模式
-f 从指定文件中读取要匹配的pattern
-i 忽略大小写
-E 匹配正则表达式(在-E 之后,正则表达式的符号不需要加反斜杠)

2. sed

sed:流编辑器,一般用来对文本进行增删改查(sed是以为单位来处理的)。
用法:sed [-options] 'script' file(s)

常见参数 含义
-n 取消默认输出,只显示经过sed处理或匹配的行(常用)
-e 直接在命令模式上进行sed 的动作编辑,接要执行的一个或者多个命令
-i 直接修改读取的文件内容,不输出。(除非使用-i修改内容,其他时候使用sed,原文件不会发生改变。不建议随便使用-i参数)
常见'script' address 含义
2 第2 行
2,4 第2 行第4 行
2,$ 第2 行到最后一行,$ 表示最后
2~3 从第2 行开始,每隔3 行取一行
2,+4 从第2 行到2+4 行
/pattern/ 匹配上pattern 的行

[!] 表示否定,取反(相当于grep -v)

常见'script' command 含义
a append,在指定行的增加一行,内容为a 的后面接的字符串(增)
i insert,在指定行的增加一行,内容为i 的后面接的字符串(增)
d delete,删除某一行或者某几行,也可以指定删除匹配上的行(删)
c change,改变指定行的内容(改)
s 替换,使用格式为's/pattern/new/[flags]',把pattern替换成new,默认只替换一个,可以指定flags。flag设为g时和vim中一样,是全局替换。设为1是为出现第一次时进行替换。(改)
y 转换,实现字符一对一转换,格式'y/inchars/outchars/'。incharts和outcharts的字符数必须一致。(改)
p print,把匹配或修改过的行打印出来,通常与–n参数合用(查)

3. awk

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk。gawk 是 AWK 的 GNU 版本。
用法:awk [options] '{script}' file

常见参数 含义
-F fields,设置字段(列)分隔符(默认是空白字符,也就是空格和\t都会被分隔。⚠️cut的分隔只识别\t);
-v var=value 定义awk程序中的一个变量及其默认值

基础结构: ' {script} '
匹配结构: ' /pattern/{script} '
扩展结构: 'BEGIN{script} {script} END{script}'

awk 在读取一行文本时,会用预定义的字段分隔符划分每个数据字段,并分配给一个变量。
$0 代表整个文本行;
$1 代表文本行中的第1个数据字段;
……
$NF 代表文本行中的最后一个数据字段
awk 默认的字段分隔符是任意空白字符(如:空格or 制表符),也可以用-F 参数自定义分隔符

上一篇下一篇

猜你喜欢

热点阅读