Linux三剑客
grep : 可以在文本中查找指定的字符串,逐行处理文本。
sed 流式编辑器 : 可以对文档进行非交互式增删该查,逐行处理。
awk : 可以实现精确搜索并输出,逐行处理。
grep命令的用法详解:
命令用法: grep 选项 条件 被处理文档
grep -E, --extended-regexp PATTERN is an extended regular expression
#也可以用egrep进行对于扩展正则的查询
#扩展正则表达式 意为着使用使用扩展正则表达式
grep -F, --fixed-strings PATTERN is a set of newline-separated strings
#固定字符串 将范本样式视为固定字符串的列表
grep -G, --basic-regexp PATTERN is a basic regular expression (default)
#基本正则表达式 表示使用标准的正则表达式(默认使用)
grep -P, --perl-regexp PATTERN is a Perl regular expression
#让grep使用perl的正则表达式 实现perl的正则的多元化,可以实现更加复杂的场景
grep -e, --regexp=PATTERN 用 PATTERN 来进行匹配操作
#指定字符串作为查找文件内容的范文样式
#-e 与 -E 的区别: -e只能传递一个检索内容 -E可以传递多个内容
#例如 使用first查找和second
#grep -e first -e second file
#而是用grep -E 就可以直接利用|进行传递
#grep -E first|second file
grep -f, --file=FILE 从 FILE 中取得 PATTERN
#指定文件为模版范文 可以查找符合范本的文件内容
grep -i, --ignore-case 忽略大小写
#在查找内容时候忽略大小写
grep -w, --word-regexp 强制 PATTERN 仅完全匹配字词
#强制按照模版进行查找,只查找符合条件的字词
grep -x, --line-regexp 强制 PATTERN 仅完全匹配一行
#强制按照按照模版进行查找,只查找符合条件的一行
grep -z, --null-data 一个 0 字节的数据行,但不是空行
#在需要跨行匹配的时候,-z必须要加。
还有一些常用的选项:
grep -o, --only-matching 只显示匹配PATTERN 部分的行
grep -v, --invert-match 选中不匹配的行
grep -V, --version 显示版本信息并退出
grep -n --line-number 在显示符合模版要求的内容时,显示该列的编号
grep -v 反转查找
grep -l --files-with-matches 列出文件内容符合模版的的文件名称
grep -L --files-without-match 列出文件内容不符合模版的文件名称
grep --help 显示此帮助并退出
这里也只是列举了一些grep的常用选项,在配合上一些正则就可以实现内容的标准匹配和模糊匹配之列的,可以联合管道“|”一起使用或者利用一些其他工具在脚本中实现一些非交互式的使用。
sed命令的用法详解:
命令用法: sed 选项 条件 指令 被处理文档
sed -n
#屏蔽默认输出
sed -r
#支持扩展正则
sed -i
#对源文件进行修改
sed 'p'
#输出内容
#例: sed -n 'p' file 输出file文件的所有行
#例: sed -n '2p' file 输出file文件的第二行
#例: sed -nr '/^first|^second/p' file 输出以first或者second开头的一行
#可以配合正则表达式一起使用
sed 's'
#对查询到的内容进行替换
#例: sed 's/2011/1234/' file 将file文件中的第一个2011替换为1234
#例: sed 's/2011/1234/2' file 将file文件中的第二个2011替换为1234
#例: sed '2s/2011/1234/' file 将file文件中第二行的第一个2011替换为1234
#例: sed 's/2011/1234/g' file 将file文件中的所有2011替换为1234
#可以配合正则一起使用
sed 'd'
#将查找到的文件进行删除
#例: sed '3,5d' file 将file文件的3~5行删除
#例: sed '/^$/d' file ^$代表空行 将file的所有空行进行删除
#可以配合正则一起使用
还有一些常用的选项:
sed 'a' #行下追加
sed ‘i’ #行上添加
sed ‘c’ #替换整行
sed是执行对文件的逐行处理可以利用选项-i对源文件进行修改i,而不仅仅实现只是查询的效果。
awk的命令详解:
命令用法: awk 命令 条件 指令 被处理文档
也可以处理前置命令利用管道而传递过来的执行结果: 前置命令 | awk 选项 条件 指令
awk -F #定义分割符
指令: “print”
条件: /字符串/
内置变量:
$1 第一列 $2 第二列 $3 第三列 $4 第四列
$0 所有列 NR 行号 NF 列号
例: awk '{print}' file.txt #输出file文件的所有
例: awk '/fi/{print}' file.txt #输出file文件中含有fi的一行
例: awk '/^fi$/{print}' file.txt #输出file文件中以fi开头并写以fi结尾的一行
例: awk '{print NR}' file.txt #输出file文件的行号
例: awk '{print NF}' file.txt #输出file文件的列号
例: awk '{print $1 "我是:" $6}' file.txt #输出常量,但是需要利用""引住
还可以利用一些运算符号进行筛选:
awk 'NR%2==0{print NR,$0}' file.txt #NR行号除于2余数等于0的行,然后输出该行的行号和所有列。
awk处理时机,可以执行额外任务。
BEGIN 任务 执行1次,读取文档之前执行
逐行任务 执行n次 ,读取文档时执行
END任务 执行1次,读取文档之后执行
例: awk -F: 'BEGIN{print "ok"} {print $1} END{print "ok"}' file.txt #会首先执行BEGIN的命令输出ok,然后在执行逐行任务输出file文件中的第一行,最后再执行END的任务输出ok。
如果可以掌握linux三剑客的使用方式,就基本可以满足在你日常的基本搜索和对于一些内容的提取修改,想要做好自动化运维就要必须要熟练的在脚本中加入三剑客,去完善简便脚本的执行过程。