文本过滤

摘要:

正则表达式、sed介绍、find介绍、合并与分割(sort,unique,join,cut,paste,split)、grep介绍、awk介绍


5.1正则表达式

一种用来描述文本模式的特殊语法

由普通字符(例如字符a到z)以及特殊字符(称为元字符,如/,*,?等)组成

匹配的字符串

文本过滤工具在某种模式下都支持正则表达式


5.2基本元字符集及其含义



5.3使用句点匹配单字符

句点“.”可以匹配任意单字符



5.4行首以^匹配字符串或字符 序列

^只允许在一行的开始匹配字符或单词



5.5行尾以$匹配字符串或字符

$与^正相反,它在行尾匹配字符串或字符,$符号放在匹配单词后



5.6用*匹配单字符或其重复序列

匹配任意字符零次或多次重复表达



5.7用\屏蔽一个特殊字符

特殊字符“,‘,||,^,*,+等



5.8用[]匹配一个范围或集合

逗号将括弧内要匹配的不同字符串分开

用”-“表示一个字符串范围,表明字符串范围从”-“左边字符开始,到”-"右边字符结束


5.9用\{\}匹配模式结果出现的次数



5.10find命令

一个查找命令

查找具有某些特征文件的命令

可遍历当前目录甚至整个文件系统来查找某些文件或目录

遍历打的文件系统时,一般放在后台执行

find命令的一般形式:

find pathname -options 【-print -exec -ok】

-pathname find命令所查找的目录路径。例如用.表示当前目录,用/表示系统根目录

- -print find命令将匹配的文件输出到标准输出

- -exec find命令对匹配的文件执行该参数所给出的shell命令,相应命令的形式为’command‘ {} \;注意{}和\;之间的空格

- -ok和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行

find命令选项

find命令的一般形式:

- -name按照文件名查找文件

- -perm按文件的权限来查找文件

- -user按照文件属主来查找文件

- -group按照文件所属的组来查找文件

- mtime -n +n按照文件的更改时间来查找文件, -n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime选项,但它们都和-mtime选项相似

- -size n[c]查找文件长度为n块的文件,带有c时表示文件长度以字节记

- -nogroup查找无有效所属组的文件,即该文件所述的组在/etc/groups中不存在

- -nouser产找无有效属主的文件,即该文件的属主在/etc/passwd中不存在

- -newer files1 !file2 查找更改时间比文件file1新单比文件file2旧的文件

- -type查找某一类型的文件例如

b -块设备文件

d -目录

c -字符设备文件

p -管道文件

l -符号链接文件

man find

例子:

使用name选项

可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来

find -name "*.txt" -print
find ./ -name "*.txt" -print
find . -name "*.txt" -print
find /etc -name "host*" -print
使用perm选项

find . -perm 755 -print

使用user和nouser选项

find `pwd` -user root -print
find `pwd` -nouser -print


使用group和nogroup选项

find ./ -group cyf -print
find ./ -nogroup -print

按照更改时间查找文件

find /var -mtime -5 -print
find /var -mtime +5 -print

查找比某个文件新或旧的文件

find `pwd` -newer "myfile" ! -newer "cyf" -print


使用type选项

find /etc -type d -print
find /etc -type l -print

使用size选项

find . -size +10000c -print
find . -size +10 -print

使用depth选项

使用find命令是,可能希望先匹配所有的文件,在在子目录中查找

find / -name "CON.FILE" -depth -print

使用exec或ok来执行shell命令

find . -type f -exec ls -l {} \;
find . -name "*.log" -mtime +5 -ok rm {} \;

Xargs

在使用find命令的-exec选项处理匹配到的文件时,find命令将匹配到的文件一起传递给exec。不幸的是,有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。exec会发起多个进程,而xargs不会多个,只有一个。

find ./ -perm -7 -print| xargs chmod o-w
find ./ -type f -print|xargs file

5.12grep介绍

grep是UNIX和Linux中使用最广泛的命令之一

对文本文件进行模式查找

grep有三种变形

grep:标准grep命令

egrep:扩展grep,支持基本即扩展的正则表达式

fgrep:快速grep

grep一般格式:

grep 【选项】基本正则表达式 【文件】

字符串参数最好采用双引号括起来,一是以防被误解为shell命令,二是可以用来查找对个单词组成的字符串

-c只输出匹配行的计数

-i不区分大小写(只适用于单字符

-h查询多文件时不显示文件名

-H显示文件名

-l查询多文件时只输出包含匹配字符的文件名

-n显示匹配行及行号

-s不显示不存在或无匹配文本的错误信息

-v显示不包含匹配文本的所有行

例子:

grep "cyf" *.txt
grep "sort it " *
grep -c "2005" cyf.txt
grep -n "cyf"cyf.txt
grep -i "cyf" cyf.txt
grep -v "2004:22" cyt.txt
grep "2004:22:5[0-9]" cyf.txt
grep "^[^210]" cyf.txt

grep "H*P" myfile
grep "[5-8][6-9][4-6]" myfile
grep "4\{3\}" myfile
grep "4\{3,\}" myfile
grep "4\{3,6\}" myfile
grep "^$" myfile
grep "\?" myfile
grep "^d" cyf.txt
grep "^[^d]" cyf.txt

grep命令类名


5.13awk介绍

可从文件或字符串中基于指定规则浏览和抽取纤细

是一种自解释的编程语言

三种方式调用awk:

命令行方式

awk [-F filed-spearator] 'command' input-files

awk脚本

所有awk命令插入一个文件,并使awk程序可执行,然后用awk命令解释器 作为脚本呢的首行,以便通过键入脚本名称来调用它

awk命令插入一个单独文件

awk -f awk-script-file input-files
awk脚本由各种操作和模式组成

模式和动作

模式部分决定动作语句何时触发及触发事件(BEGIN,END)

动作对数据进行处理,放在大括号{}内声明(print)

分隔符、域和记录

awk执行时,其浏览域标记为$1,$2,..$n。这种方法称为域标识。$0为所有域

注意执行时不要混淆符号$和shell提示符$,它们是不同的

awk '{print $0}' score.txt|tee score.out
awk '{print $1 "\t" $4}' cyf.txt
awk 'BEGIN {print "1    2\n---------"} {print $1 "\t" $4} END {print "end-of-file"}' cyf.txt
awk中的特殊元字符:+,?

匹配操作符:~,!~

cat cyf.txt |awk '$0~/218.79.131.96/'
awk '$0!~/218.79.131.96/' cyf.txt
awk '{if ($1=="218.79.131.96") print $0}' cyf.txt
man awk


5.14sed介绍

sed不与初始化文件打交道,它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕

sed是一种重要的文本过滤工具,使用一行命令或者使用管道与grep与awk相结合

非交互式文本流编辑


调用sed有三种方式

使用sed命令行格式为:

sed 【选项】sed命令 输入文件

使用shell脚本文件,格式为:

sed 【选项】 -f sed脚本文件 输入文件

sed脚本文件 【选项】 输入文件

不管是使用shell命令行方式或脚本文件方式,如果没有指定输入文件,sed从标准输入中接受输入,一般是键盘或重定向结果

sed命令选项如下:

-n不打印

-c下一命令是编辑命令

-f如果正在调用sed脚本文件
sed在文件中查询文本的方式

-使用行号,可以是一个简单数字,或是一个行号范围

-使用正则表达式


基本sed编辑命令



例子:





5.15合并与分割

sort [options] files

许多不同的域按不同的列顺序分类

-c测试文件是否已经分类

-m合并两个分类文件

-u删除所有复制行

-o存储sort结果的输出文件名

-t域分隔符,用非空格或tab键分隔域

+nn为域号,使用此域号开始分类

n指定分类是域上的数字分类项

-r比较求逆

man sort

sort -c cyf.txt
sort -u cyf.txt
sort -r cyf.txt
sort -t "/" +2 cyf.txt
sort -t "/" +2n cyf.txt

uniq -c myfile.txt
uniq -d myfile.txt
uniq -f 2 myfile.txt
grep "php" mygifle |awk '{print $1}' |sort |uniq -c




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yiluohan0307

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值