shell编程(六)

 find 命令
是真正的在文件系统中查找。
和local  命令的区别


find
-name 按照文件名查找文件
-perm 按照文件权限来查找
-user按照文件属主来查找
-group文件所属于的组
-mtime -n +n文件的更改时间 -n表示文件更改时间距现在n天以内
+n表示文件更改时间距现在n天以前。
find命令还有-atime和-ctime选项,他们和-mtime相似。


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

find
-nogroup 即该文件所属的组在/etc/groups中不存在
-nouser 即该文件的属主在/etc/passwd中不存在。
-newer file1 !file2:查找更改时间爱你比文件file1新但比文件file2
旧的文件。

-type 查找某一类型的文件。
b -块设备文件
d-目录
c-字符设备文件
p-管道文件
l-符号链接文件
f-普通文件。

man find 查看


find -name "*.txt" -print
find ./ -name "*.txt" -print

find ./ -name "p[A-Z]*" -print
find /etc -name "host*" -print
使用perm选项:
find -perm 755 -print
find `pwd` -user root -print
find `pwd` -nouser -print

nohup find `pwd` -user root -print &

find ./ -group itlab -print
find ./ -nogroup -print


find /var -mtime -5 -print

find `pwd` -newer "myfile" ! -newer "myfile123" -print
find /etc -type d -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  ---可以查看文件类型。


文本的过滤
grep

一般格式:
grep [选项] 基本正则表达式[文件]
字符传参数最好采用说谎引号括起来,一是为了防止被误解为shell命令
二是可以用来查找多个单词组成的字符创。

-c只输出匹配行的计数
-i不区分大小写(只适合于单字符)
-h 查询多文件时不显示文件名
-H显示文件名
-l查询多问及爱你时只输出包含匹配字符的文件名
-n显示匹配行及行号
-s不显示不存在或者无匹配文本的错误信息
-v显示不包含匹配文本的所有行。

grep "jenny" *.txt
grep "sort it" *
grep -c "2005" myfile
grep -n "2004" myfile
grep -i "Jul" myfile
grep -v "2004:22" myfile
grep "2004:22:5[0-9]" myfile
grep "^[^210]"myfile
grep "H*P" myfile
grep "[5-8][6-9][0-3]"myfile
grep "4/{2/}" myfile
grep "4/{2,/}" myfile
grep "4/{2,4/}" myfile
grep "^$" myfile
gep "/?" myfile
grep "^d"lsout.txt
grep "^[^d|p]"lsout.txt

grep 命令类名:

[[:upper:]] 等价于[A-Z]
[[:alnum:]] 等价于[0-9a-zA-Z]
[[:lower:]] 等价于[a-z]

[[:space:]] 等价于空格或者tab键
[[:digit:]] 等价于[0-9]
[[:alpha:]] 等价于[a-zA-Z]

grep"5[[:digit:]][[:digit:]]" myfile

grep "php" myfile|wc -l
grep "php/html/call_info.php" myfile|wc -l

awk介绍:
其实是一种编程语言:
可以从文件或者字符串中指定规则浏览和抽取信息
是一种自解释的编程语言
三种方式调用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}'score.txt
awk 'BEGIN {print"Name Maths/n---------"}{print $1"/t"$4}
END{"end-of-report"}'score.txt
awk 中的特殊元字符:+,?
+匹配任意字符,?匹配单个字符
匹配操作符:~,!~
cat score.txt|awk '$0~/218.79.131.96/'

awk'$0!~/218.79.131.96/'score.txt
awk '{if($1=="218.79.131.96") print $0}'score.txt
man awk
sed介绍
他不予初始化文件打交道,他操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件
将输出 到屏幕
sed是一个重要的文本过滤工具,使用一行命令或者使用管道域grep与
awk相结合
非交互性文本流编辑。

调用:
三种方式:
sed[选项] sed命令 输入文件
使用sed脚本文件,格式为:
sed [选项] -f sed脚本文件,输入文件
sed 脚本文件 【选项】 输入文件
命令选项:
-n 不打印
-c 下一个命令是编辑命令
-f 如果正在调用sed脚本文件。

sed在文件中查询文本的方式
-使用行号,可以是一个简单的数字,或者是一个行号范围
使用正则表达式
x: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:传送字符

 

举例:
sed -n '2p' score.txt:打印出第二行的信息。
sed  '2p' score.txt:打印所有行的信息。
sed  -n '1,4p' score.txt打印出1到4行
sed -n '/los/p' myfile.txt 打印出只包括/los/的信息
sed -n '4,/los/p' myfile.txt
sed -n '/^$/=' myfile.txt
sed -n -e '/^$/p'-e '/^$/=' myfile
sed -n '/chinaitlab/a/shenzhen' myfile.txt
sed -n '/chinaitlab/i/shenzhen' myfile.txt
sed -n '/chinaitlab/c/chinaitlab shenzhen' myfile.txt/

sed '1,2d' myfile.txt
sed 's/chinaitlab/chinaitlab shengzhen/g' myfile.txt
sed -n 's/chinaitlab/& hello/p'myfile.txt
sed -n 's/chinaitlab/hello &/p' myfile.txt
sed 'ls ctrl.txt' myfile.txt
sed '/china/q' myfile.txt
sed -n '/china/l' myfile.txt

info sed man sed


合并与分割
sort [options] files
许多不同的域按不同的列顺序分类
-c 测试文件是否已经分类
-m合并两个分类文件
-u删除所有复制行
-o 存储sort结果的数据文件名
-t域分隔符,用非空格或tab键分割域
+n n为域号,使用此域号开始分类
n制定分类是域上的数学分类项
-r比较求逆。

uniq [option] files
从一个文本文件中去除或禁止重复行
-u只显示不重复行
-d只显示有重复数据行,每种重复行只能显示一行
-c打印每一个重复行出现次数
-f n为数字,前n个域被忽略
man uniq

split用来将大文件分割成小文件
split 命令一般格式:
split -outpub_file-size input-filename output-filename

-b  n,每个分割文件的大小n(k,m)
-C n,每个分割文件一行最多n字节数
-l n,每个分割文件的行数。
-n,同-l n
split -10 ls_out.txt split
man split

join

自己上网来查找。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值