目录
前言
这里将介绍所谓文本三剑客的基础知识,带大家简单了解一下操作文本的基本工具命令的使用方法,包括grep、sed、awk,希望对大家有一点帮助
1.grep命令
1.1命令介绍
grep全称是Global Regular Expression Print,是一种强大的文本搜索工具且具备显示结果的效果 ,表示全局正则表达式版本,它的使用权限是所有用户。grep还可以应用于shell脚本当中。
1.2常用参数
参数 | 使用格式 | 作用 |
A | grep -A1 aaa test | 显示第一行符合条件aaa的那一列之外,并显示该行之后的内容,指定查询 |
B | grep -B2 bbb test | 显示第2行符合条件bbb的那一列之外,并显示该行之前的内容,指定查询 |
C | grep -C3 AAA test | 显示第3行符合条件AAA的那一列之外,并显示该行之前之后的内容,指定查询 |
c | grep -c aaa test | 统计匹配到aaa的总行数 |
e | grep -e aaa -e BB test | 多个匹配条件 |
f | grep -f a.txt test | 比对两个文件中包含值 |
i | grep -i aa test | 忽略字符大小写的差别 |
n | grep -n aaa test | 显示匹配的行号 |
q | grep -q aa test | 静默模式,不输出任何信息 |
v | grep -v aa test | 除了,反向 |
w | grep -w aaaaa test | 匹配整个单词 |
-
练习
2.sed命令
2.1命令介绍
sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出或-i。
2.2常用选项
命令格式: sed` `[选项] ``'[地址定界] command'` `file`` | |
选项 | 作用 |
n | 不自动打印,只打印匹配到的行 |
e | 多点编辑 |
f | 把脚本写到文件当中,在执行sed时-f 指定文件路径 |
r | 支持扩展的正则表达式 |
i | 直接将处理的结果写入文件 |
i.bak | 在将处理的结果写入文件之前备份一份 |
地址定界 | 作用 |
不给地址 | 对全文进行处理 |
单地址 | #: 指定的行 /pattern/:被此处模式所能够匹配到的每一行 |
地址范围 | , ,+ /pat1/,/pat2/ ,/pat1/ |
~:步进 | sed -n '1~2p' 只打印奇数行 sed -n '2~2p' 只打印偶数行 |
command | 作用 |
d | 删除行,因为是删除,所以 d 后面通常不接任何参数,直接删除地址表示的行 |
p | 将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行 |
a | 指定行后面追加文本,支持使用\n实现多行追加 |
i | 在行前面插入文本,支持使用\n实现多行追加 |
c | 替换行为单行或多行文本,支持使用\n实现多行追加 |
w | 保存模式匹配的行至指定文件 |
r | 读取指定文件的文本至pattern中匹配到的行后 |
= | 为pattern中的行打印行号 |
! | 模式空间中匹配行取反处理 |
s | 替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规s@@@ |
h | 把模式空间中的内容覆盖至保持空间中 |
H | 把模式空间中的内容追加至保持空间中 |
g | 从保持空间取出数据覆盖至模式空间 |
G | 从保持空间取出内容追加至模式空间 |
x | 把模式空间中的内容与保持空间中的内容进行互换 |
n | 读取匹配到的行的下一行覆盖至模式空间 |
N | 读取匹配到的行的下一行追加至模式空间 |
d | 删除模式空间中的行 |
D | 删除当前模式空间开端至\n 的内容,放弃之后的命令,但是对剩余模式空间重新执行sed |
/s/a/A/g | 加g表示行内全局替换,意思将pattern中匹配的a替换为A |
---|---|
\l | 把下个字符转换成小写 |
\L | 把替换字母转换成小写,直到\U或\E出现 |
\u | 把下个字符转换成大写 |
\U | 把替换字母转换成大写,直到\L或\E出现 |
\E | 停止以\L或\U开始的大小写转换 |
-
练习
3.awk命令
3.1命令介绍
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。 它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。awk其实不仅仅是工具软件,还是一种编程语言。
3.2常用选项
-
-F fs:fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
-
-v var=value:赋值一个用户定义变量,将外部变量传递给awk
-
-f scripfile:从脚本文件中读取awk命令
3.3语法格式
awk [选项] ‘条件{动作} 条件{动作} ... ...’ 文件名
3.4变量
内置和自定义变量,每个变量前加 -v 命令选项
3.4.1内置变量
-
FS :输入字段分隔符,默认为空白字符
-
OFS :输出字段分隔符,默认为空白字符
-
RS :输入记录分隔符,指定输入时的换行符,原换行符仍有效
-
ORS :输出记录分隔符,输出时用指定符号代替换行符
-
NF :字段数量,共有多少字段, $NF引用最后一列,$(NF-1)引用倒数第2列
-
NR :行号,后可跟多个文件,第二个文件行号继续从第一个文件最后行号开始
-
FNR :各文件分别计行号,后跟一个文件和NR一样,跟多个文件,第二个文件行号从1开始
-
FILENAME :当前文件名
-
ARGC :命令行参数的个数
-
ARGV :数组,保存的是命令行所给定的各参数,查看参数
3.4.2自定义变量
(1)先定义变量,后执行动作print
(2)在执行动作print前、后定义变量
(3)在脚本程序中直接定义
3.5printf命令
3.5.1命令格式
{printf "格式",$项1,$项2...}
3.5.2格式符
-
%c: 显示字符的ASCII码
-
%d, %i: 显示十进制整数
-
%e, %E: 显示科学计数法数值
-
%f :显示为浮点数,小数 %5.1f,带整数、小数点、整数共5位,小数1位,不够用空格补上
-
%g, %G :以科学计数法或浮点形式显示数值
-
%s :显示字符串;例:%5s最少5个字符,不够用空格补上,超过5个还继续显示
-
%u :无符号整数
-
%%: 显示% 自身
3.5.3修饰符
-
数1.数2:第一个数字控制显示的宽度;第二个#数表示小数点后精度,%5.1f
-
-:左对齐(默认右对齐) %-15s
-
+:显示数值的正负符号 %+d
3.6操作符
3.6.1模式匹配符
这里的/dev磁盘字段可以看出有6个,我们只让显示倒数第一或者第二个和磁盘名
3.6.2逻辑操作符(与&& ,或|| ,非!)
3.6.3条件表达式(三目表达式)*三目运算符 (表达式1)?(表达式2):(表达式3),计算方法是这样的:表达式1是一个逻辑表达式,如果其值为true,则整个表达式的值为表达式2的值,否则为表达式3的值
下面的命令表示第三列的值大于等于1000时如果为真结果打印为user,否则就打印root