shell中文本处理工具

一 文本处理工具

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 ""]

猜你喜欢

转载自blog.csdn.net/yangkaiorange/article/details/81950689