一 文本处理工具
1)grep 命令是一种强大的文本搜索工具,根据用户指定的“模式”对目标文本进行匹配检查,打印匹配到的行
grep 匹配条件 处理文件
grep root passwd
grep -i root passwd 不区分大小写
egrep = grep -E 过滤所有
grep -i -E "^root|root$" passwd 过滤root开头或结尾的
grep -i -E "^root|root$" passwd -v 过滤除了以root开头或结尾的
grep -E 'r..t' passwd
grep -E '...t' passwd
grep -E "\<....t"passwd 过滤开始为...t的字符
grep -E "....t\>" passwd 过滤结束为...t的字符
grep -E "\<....t\>"passwd
grep 中字符的匹配次数设定
* 字符出现[0-任意次]
?={0,1} 字符出现0-1次
{n} 字符出现n次
{m,n} 字符最少出现m次,最多出现n次
{0,n} 字符出现0-n次
{m,} 字符至少出现m次
"t(xy){3}t" 字符在两个t之间出现3次xy字符
示例 grep -E 'xa{3,}y ' file 过滤在file这个文件中以x开头y结尾中间有不少于3个a的字符
2)sed 流编辑器
stream editor(流编辑器)
用来操作纯 ASCII 码的文本
处理时,把当 前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)可以指定仅仅处理哪些行
sed 符合模式条件的处理 不符合条件的不予处理
处理完成之后把缓冲区的内容送往屏幕
接着处理下一行,这样不断重复,直到文件末尾
sed 对字符的处理
-e 直接在命令行模式进行sed动作编辑
-f 将sed的动作写在一个文件内
-i 直接修改文件的内容
-n 只打印模式匹配的行
sed常用的命令
a\ 在当前行下面插入文本
i\ 在当前行上面插入文本
c\ 把选定的行改为新的文本
d 删除选择的行
w 表示把行写入一个文件
s 替换指定的字符
g 获得内存缓冲区的内容,表示行内全面替换
p 表示打印行
n 读取下一个输入行,用下一个命令处理新的行而不是第一个命令
sed 元字符集
^ 匹配行开始
$匹配行结束
. 匹配一个非换行符的任意字符
* 匹配0个或多个字符
\< 匹配单词的开始
\>匹配单词的结束
3)awk行处理器
awk [-F|-f|-v] 'BEGIN {} //{command1;command2} END{}' file
[-F|-f|-v] -F指定分割符 ,-f调用脚本,-v定义变量 var=value
' ' 引用代码块
BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要引用全局变量,设置FS分割符
// 匹配代码块,可以是字符串和正则表达式
{} 命令代码块。包涵一条或多条命令
END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾i摘要信息
特殊要点
$0 表示整个当前行
$1 每行第一个字段
NF 列
NR 行
\t 制表符
\n 换行符
二 shell常用的命令
补丁的小实验
diff -u file file1 ##找出file对于file1不同
diff -u file file1 > file.path ##把两者不同数据部分作为补丁
yum install patch -y ##安装patch数据包
-p :后面可以接“取消几层目录”的意思。
-R :代表还原,将新的文件还原成原来旧的版本
-b :备份文件。在修补文件时,重命名或复制原始文件,而不是删除它
patch file file.path ##给file打上补丁,就会发现file和file1数据一致
patch -b file file.path ##备份file源文件,并且生成了file.orig文件
1)diff命令
diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。
diff -b 不检查空格字符的不同
-B 不检查空白行
-c 显示全部内文,并标出不同之处
-i 不检查大小写的不同
-p 比较c语言文件时 显示差异所在的函数名称
-q 仅显示有无差异,不显示详细信息
-r 比较子目录中的文件
-u 以合并的方式来显示内容的不同
2)cut命令
cut命令多用于字符截取
-d 指定分隔符
-f 1,7|1-7 指定截取的列
-c 1,4 | 1-4 指定截取的字符位置
3)sort命令
-n 纯数字排序
-r 倒序
-u 去掉重复数字
-o 输出到指定文件中
-t 指定分隔符
-k 指定要排序的列
4)uniq命令
对重复的字符做相应的处理
-u 显示唯一的行
-d 显示重复的行
-c 每行显示一次并统计重复次数
5)test命令和[]等同
test"$A"=="$B" 等同 ["$A" =="$B"]
[""= | != | -eq | -ne | -gt | -lt | -ge | -le ""]
["" "" -a|-o "" ""]
[ -z|-n ""] ["" -ef|-ot|-nt ""]