shell编程四剑客find grep awk sed

shell编程四剑客find grep awk sed

1.find 文件查找命令(根据文件名称)

查找home目录下名字为test的所有txt文件
find /home/ -name "test.txt"

查找当前路径下,一天内创建的,名字以.txt结尾的目录(f表示文件),并将它复制到tmp目录下
find . -name "*.txt" -type d -mtime -1 -exec cp -r {} /tmp/ \;

查找当前路径下30天以前的后缀是log的文件,然后删除掉
find . -type f -name "*.log" -mtime +30 -exec rm -rf {} \;

2.grep 过滤查找,找文件内容

查找passwd中的root字符并加行号加颜色显示
grep -n --color "root" /etc/passwd

查找文件中不含#的行
grep -v "#" /usr/data.txt

3.awk(噢可) 文本查找处理工具

NR:number of record(行号)

NF:number of field(列号)

显示所有数据并在第一列加上行号
awk '{print NR "\t" $0}' test.txt

显示所有数据并在第一列显示当前行的列数(空格分割为界)
awk '{print NF "\t" $0}' test.txt

查找功能
查找第一列为bob的数据
awk '$1=="bob"{print $0}' test.txt

查找第7行数据
awk 'NR==7{print $0}' test.txt

输入按逗号分割开,输出按制表符分割显示(输入输出分隔符默认都是空格)
awk 'BEGIN{FS=","; OFS="\t"} {print $1, $2}'

将第3列的数据隐藏,显示为xxx
awk '{$3="xxx"; print $0}' data.txt

打出文件的最后一列数据
awk '{print $NF}' data.txt

awk '{a=2; b="apple"; c=3; print b+c}'  输出3,字符串和数字相加会把字符串中的最前面数字部分才会相加,没有数字部分则为0
awk '{a=2; b="32apple"; c=3; print b+c}'  输出35,只有最前面是数字才会相加

Regular Expression(正则表达式)

匹配字符串中含有abc的值
awk '/abc/{print $0}' data.txt

匹配字符串中含有'a+一个任意字符+c'的值
awk '/a.c/{print $0}' data.txt

如果就要匹配'a.c'这个字符串就需要用转义字符
awk '/a\.c/{print $0}' data.txt

^和$ 表示开始和结尾
匹配必须以abc开始的值
awk '/^abc/{print $0}' data.txt

匹配必须以abc结尾的值
awk '/abc$/{print $0}' data.txt

匹配'a+a到z任意一个字符+c'
awk '/a[a-z]c/{print $0}' data.txt

匹配'a+除了小写a到z之外的一个字符+c'
awk '/a[^a-z]c/{print $0}' data.txt

匹配'0个a或者任意个a+b'
awk '/a*b/{print $0}' data.txt

匹配'至少一个a+b'
awk '/a+b/{print $0}' data.txt

匹配'a可以有也可以没有+b'
awk '/a?b/{print $0}' data.txt

匹配'abbbc'
awk '/ab{3}c/{print $0}' data.txt

匹配'a+3个b到10个b+c'
awk '/ab{3,10}c/{print $0}' data.txt

4.sed 数据流编辑器(stream editor行编辑器)

将文本以行为单位加载进内存的模式空间,默认不编辑原文件,仅对模式空间中的数据做处理,之后再显示出来

删除第1行和第2行(d表示删除)
sed '1,2d' test.txt

删除第3行到最后一行($表示最后一行,$-1表示倒数第二行)
sed '3,$d' test.txt

模式匹配,删除包含oot的行
sed '/oot/d' test.txt

显示以/开始的行,会重复显示,因为模式空间还会显示一次,可加'-n'静默模式不显示模式空间的内容
sed '/^\//p' test.txt

在以/开头的行后面加上hello
sed -n '/^\//a \hello' test.txt

把包含oot的行数据保存到etc/fstab中
sed -n '/oot/w test.txt' /etc/fstab

把文件中的oot替换成OOT(默认只替换每行中第一次被匹配的字符串,加了修饰g,全局替换)
sed 's/oot/OOT/g' test.txt

5.几个例子

查找当前目录下包含127.0.0.1关键字的文件
grep -rl '127.0.0.1' ./
find . -type f |xargs grep "127.0.0.1"
find . -type f -exec awk '/127.0.0.1/' {} \;

显示除过第3行到第10行的内容
sed '3,10d' test.txt
awk '!(NR>=3&&NR<=10)' test.txt

显示第3行到第10行的内容
sed -n '3,10p' test.txt
awk 'NR>=3&&NR<=10' test.txt
head -10 test.txt|tail -8
awk 'NR==3,NR==7' test.txt	(逗号表示连续,第一次匹配到第二次匹配中间的所有行)

只显示第3行和第10行的内容
awk 'NR==3;NR==10' test.txt		(分号表示分隔符,分割多条命令)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值