文本过滤工具
正则表达式:一种用来描述文本模式的特殊语法,由普通字符(例如字符A-Z)以及特殊字符(称为元字符,如/ . * ?等)组成匹配字符串。
文本过滤工具在某种模式下都支持正则表达式。
#基本元字符
^ 只匹配行首
$ 只匹配行末
* 匹配0个或多个单字符
[] 只匹配[]内字符,可以是单个字符,也可以是字符序列,可以使用-表示范围,如[1-5]表示[12345].
\ 用来屏蔽元字符的含义
. 只匹配任意单字符
pattern\{n\} 匹配pattern出现的次数,n代表次数
pattern\{n,\} 匹配pattern至少出现n次
pattern\{n,m\} 匹配pattern出现的次数在n-m之间。
#example
...x..x..x
drwxrwxrwx 匹配
-rwxrwxrwx
-rwxr-xr-x 不匹配
#特殊字符
" ' || ^ * +
\*\.pas 匹配以*.pas结尾的所有字符或文件
A\{2\}B AAB
A\{2,\}B AAB AAAB
A\{2,4\}B AAB AAAAB AAAB
#Find
find pathname [option] [-print -exec -OK]
-print 标准输出到屏幕
-exec 后接命令。'command' {} \ ; 执行前不提示确认
-ok 执行前提示确认
option参数:
-name 后跟文件名称,按文件名查找
-perm 后跟权限,按权限查找
-user 后跟用户名,按文件属主查找
-group 后跟组名,按文件所属的用户组查找
-nouser 后跟用户名,查找无效用户的文件
-nogroup 后跟组名,查找无效用户组的文件
-mtime -n +n -n为N天以内修改的文件,+n为N天以前修改的文件
-type 后跟文件类型,按文件类型查找
-size 后跟数字,按大于或小于这个大小查找文件
find . -size +1000000c -print c代表字节 大于1M
find . -size +10000 -print 大于10块
-depth 先匹配文件,再在安的子目录中查找。
-newer 按文件修改时间查找,比较两个文件的新旧程序。
-exec 将前面执行的结果传递给后面的命令。
find /var/log/ -name "*.log" -mtime +5 -OK rm {} \;
-xargs
find ./ -perm 7 -print |xargs chmod o-w 将前面找到的文件所属其它组的用户权限-w
#grep [option]正则表达式[文件]
#-option
-c 显示匹配行数
-n 显示匹配的行及行号
-h 查询多文件时不显示文件名
-H 查询文件时显示文件名
-i 不区分大小写
-v 显示不包匹配文本的所有行
-l 查询多文件时只输出包含匹配字符的文件名。
grep "jenny" *.txt 在所有txt文件中查询
^[^210]非210头的
[[:upper:]] [A-Z]
[[:alnum:]] [0-9a-zA-Z]
[[:lower:]] [a-z]
[[:space:]] [空格或tab键]
[[:digit:]] [0-9]
[[:alpha:]] [a-zA-Z]
grep [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}
#awk
#awk [-F filed-spearator] 'command' input-files 命令方式调用 filed-spearatorl输出分隔符,默认为空格。
#包括模式和动作,动作放在大括号中{}一般为print,分隔符、域和记录。域表示为:$1 $2 $n
#awk脚本调用
awk '{print $0}' xxx.txt |tee xxx.file 打印xxx.txt文件所有的域并输出为文件xxx.file
awk '{print $1 "\t" $4}' xxx.txt 打印xxx.txt文件的第一个域和第4个域,并以Tab分开
awk 'begin {print "NAME Maths\n-------"} {print $ "\t" $4} end {"end-of-report"}' xxx.txt 输出为以下格式:
NAME Maths
-----------------
xxx xxx
…… ……
end-of-report
#awk
#特殊元字符:+,?
~表示匹配,!~表示不匹配
cat xxx.txt |awk '$0 ~/xxx/'
cat xxx.txt |awk '$0 !~/xxx/'
awk '{if($1=="xxx")print $0}' xxx.txt
#sed
#sed [option] sed命令 输入文件
#sed [选项] -f sed脚本文件 输入文件
#sed脚本文件 [选项] 输入文件
#-n不打印 p打印匹配行
-c 下一命令是编辑命令
-f 正在调用sed脚本文件
x 行号
x,y 行号范围从x到y
/pattern/ 查询包含模式的行
/pattern/pattern 查询包含两个模式的行
pattern/,x 在给定的行号上查询包含模式的行
x,/pattern/ 通过行号和模式查询匹配的行
x,y! 查询不包含指定等号x和y的行
#基本sed编辑命令
p 打印匹配行
= 显示文件行号
a\ 在定位行号后附加新文本信息
i\ 在定位行号后插入新文本信息
d 删除定位行
c\ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读取文本输入到当前匹配到行中
w 写文本到别一个文件
q 第一个模式匹配后立即退出
l 显示与八进制ASCII代码等价的控制字符
{} 在定位行执行命令组
n 从另一个文件中读文本下一行,并附加在匹配行的下一行
g 将模式2粘贴到/pattern n/
y 传送字符
#example
sed -n '2p' xxx.txt 打印xxx.txt第二行信息
sed -n '1,4p' xxx.txt 打印xxx.txt的1-4行
sed -n '/los/p' xxx.txt 打印匹配模式los的行
sed -n '4,/los/p' xxx.txt 打印第4行开始匹配los模式结束
sed -n '/^$/=' xxx.txt打印空行
#合并与分割
sort [option] files
-c 测试文件是否已经排序
-m 合并两个分类文件
-u 删除所有复制行
-o 存储sort结果的输出文件名
-t 域分隔符;用非空格或tab键分隔域
+n-n 域号,使用些域号开始分类
-n 指定分类是域上的数字分类项
-r 比较求逆
#example
sort -c xxx.txt
sort -u xxx.txt 合并重复的行
sort -r xxx.txt 以相反的顺序进行排序
sort -t "/" +2n xxx.txt
#uniq [option] files 去掉重复的行
-u 显示不重复的行
-d 只显示有重复的行,每种重复行只显示其中一行
-e 打印每一重复行出现次数
-f n为数字,前n个域被忽略
#example
uniq -c xxx.txt
uniq -d xxx.txt
uniq -f 2 xxx.txt
uniq -d xxx.txt
#join [option] file1 file2
#split [option]
-b n 每个分割文件的大小n(K,M)
-C n 每个分割文件一行最多n字节
-l n 每个分割文件的行数n
-n 同-l n
#example
split -10 ls xxx.txt split 后一个split代表以他开头
转载于:https://blog.51cto.com/ryan0817/606043