find 命令语法
find 查找的目录 -type 类型信息 -name "文件名"
代码语言:javascript复制find /etc -type f -name "hosts"
find /etc -type f -name "*eth0" #模糊查找,文件名记不清
find /etc -type f -i -name "if*" #忽略大小写
根据数据大小查找
find /etc -type f -size 100 #找出大于100k文件
find /etc -type f -size -100 #找出小于100k文件
find /etc -type f -size 1M #找出大于1m文件
根据目录指定层级查找
find /etc -maxdepth 1 -type f -name "123.txt"
如何把一个目录中所有“*.txt”文件进行压缩
find /home -type f -name "*.txt"|xargs tar -zcvf /home/home.tar.gz
如何找出/home目录中".txt"文件进行删除
1、find /home -type f -name "*.txt" -delete
2、find /home -type f -name "*.txt" -exec rm-f {} ;
3、find /home -type f -name "*.txt"|xargs rm -f
4、rm -rf $(find /home -type f -name "*.txt")
如何找出/home目录中".txt"文件进行文件复制/移动
find /home -type f -name "*.txt" -exec cp {} /tmp ;
find /home -type f -name "*.txt" |xargs cp -t /tmp
find /home -type f -name "*.txt" -exec mv {} /tmp ;
元字符 | 功能 | 意思 |
---|---|---|
^ | 匹配行首 | 表示以某个字符开头 |
$ | 匹配行尾 | 表示以某个字符结尾 |
^$ | 空行的意思 | 表示空行的意思 |
. | 匹配任意单个字符 | 表示任意一个字符 |
* | 字符* 匹配0或多个此字符 | 表示重复的任意多个字符 |
屏蔽一个元字符的特殊含义 | 表示去掉有意义的元字符的含义 | |
[] | 匹配中括号内的字符 | 表示过滤括号内的字符 |
.* | 代表任意多个字符 | 就是代表任意多个字符 |
lele{n} | 用来匹配前面lele出现次数。n为次数 | 就是统计前面lele出现的次数 |
lele{n,} | 含义同上,但次数最少为n | 从功能就可以看出 |
lele{n,m} | 义同上,但lele出现次数在n与m之间 | 从功能就可以看出 |
lele{n,m} | 义同上,但lele出现次数在n与m之间 | 从功能也可以看出 |
三剑客的功能非常强大,但我们只需要掌握他们分别擅长的领域即可:grep擅长查找功能,sed擅长取行和替换。awk擅长取列。
grep命令
文本过滤(模式:pattern)工具,grep, egrep
grep [OPTIONS] PATTERN [FILE...]
代码语言:javascript复制--color=auto 对匹配到的文本着色显示
-v 显示不被pattern匹配到的行
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系
grep –e ‘cat ’ -e ‘dog’ file
-w 匹配整个单词
-E 使用ERE,相当于egrep
-F 相当于fgrep,不支持正则表达式
找出123开头的行grep "^123" 文件找出456结尾的行grep "456
系统的正则符号
基础正则符号:
1)点符号:.
匹配一个字符且只有一个字符
grep "." ~/test.txt
grep "." ~/test.txt -o #-o 显示匹配过程
2)星号:*
匹配一个字符连续出现30次或者多次
grep "0*" test.txt
3)点星组合
grep ".*" 123.txt
grep "^m.*n$" 123.txt
贪婪匹配
代码语言:javascript复制grep "^r.*x$" 123.txt #这种情况会把文件中从第一个r开头一直x结尾的匹配出来,中间如果有两三个x,也会被匹配出来
指定具体信息阻止贪婪匹配
grep "^r.*wex" 123.txt
4)括号符号[] 匹配多个信息
代码语言:javascript复制grep "te[as]t" test.txt #找出teat和test
5)括号和尖号[^]
代码语言:javascript复制grep "[abc]" /test.txt #找出abc的行
grep "[^abc]" /test.txt #找出abc以外的行
grep "^[^abc]" /test.txt #排出abc以外的行
扩展正则符号
默认grep、sed不能直接识别 grep ——> egrep /grep -E sed ——> sed -r
号符号
匹配前一个字符连接出现1次或者多此
egrep "0 " test.txt
|匹配多个信息
grep -E "123|456" test.txt
grep -E "te[as]t" test.txt
符号括号:()
作用: 1、指定信息进行整体匹配
代码语言:javascript复制grep -E "wqe(as)d" test.txt
sed
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
sed [option]... 'script' inputfile
代码语言:javascript复制选项
-n 不输出模式空间内容到屏幕,即不自动打印
-e 多点编辑
-f /PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
-r 支持使用扩展正则表达式
-i 直接编辑文件
-i.bak 备份文件并原处编辑
script 地址定界
不给地址:对全文进行处理
单地址:
#: 指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
地址范围:
#,#
#, #
/pat1/,/pat2/
`#,/pat1/
~:步进
1~2 奇数行
2~2 偶数行
编辑命令:
d 删除模式空间匹配的行,并立即启用下一轮循环
p 打印当前模式空间内容,追加到默认输出之后
a []text1 在指定行后面追加文本,支持使用n实现多行追加
i []text 在行前面插入文本
c []text 替换行为单行或多行文本
w /path/somefile 保存模式匹配的行至指定文件
r /path/somefile 读取指定文件的文本至模式空间中匹配到的行后
= 为模式空间中的行打印行号
! 模式空间中匹配行取反处理
s///:查找替换,支持使用其它分隔符,s@@@,s###
替换标记:
g 行内全局替换
p 显示替换成功的行
w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中
直接修改读取的文件内容,而不是输出到终端。
s :取代,可以直接进行取代的工作。
g: 是全局的意思。其中#是格式符,他也可以是@或者别的/。
Sed替换格式是:sed -i 's/要替换的内容/替换成的内容/g' 文件名。
1、找出文件中有test行的信息
代码语言:javascript复制sed -n '/test/' test.txt
2、在test前面添加123,在test后面添加456信息
代码语言:javascript复制sed -e '/test/i123 -e /test/456' /test.txt
3、sed删除命令
代码语言:javascript复制sed '3d' test.txt #删除前三行
sed '2,6d' test.txt #删除多行
sed '/test/d' test.txt #删除test行
sed '3d;6d' test.txt #删除3行和6行
4、利用sed命令取消空行显示
代码语言:javascript复制sed -n '/^$/!p' test.txt
sed -n '/./p' test.txt
sed '/^$/d' test.txt
5、修改内容
代码语言:javascript复制sed 's#原有的内容#修改的内容#g' 文件
PS:修改文件内容直接备份 sed -i .bak 's#xxx#yyy#g' test.txt
n和i参数同时使用会将文件内容清空 6、批量修改文件扩展名:将test.txt扩展名修改为.png
代码语言:javascript复制ls test*.txt|sed -r 's#(.*)txt#mv&|png#g' |bash
专业命令
rename 'txt .png text.txt
命令 文件名称需要修改的部分信息 修改的信息 文件
awk命令
作用: (1) 排除信息 (2) 查询信息 (3) 统计信息 (4) 替换信息 语法格式 awk [参数] '模式-动作' 文件
查询信息
代码语言:javascript复制awk 'NR==2' test.txt #显示第二行
awk 'NR==2, NR==4' test.txt #显示二到四行
awk 'NR==2; NR==4' test.txt #显示二和四行
awk '/wang/' test.txt #显示wang行
awk '/wang/,/666/' test.txt #显示有wang的行到有666行
awk '/wang/;/666/' test.txt #显示wang行和666行
awk '/wang/ {print $1 $3}' test.txt #显示有wang行的第一列和第三列内容
awk '/wang/ {print $1 "," $3}' test.txt #同上
文件空行进行排除/注释排除
代码语言:javascript复制grep -E "^#|^$" 文件
sed -n '/^#|^$/!p' 文件
awk '$0~/^#|^$/' 文件
awk '$0!~/^#|^$' 文件
总结:awk命令中符号1,2,3 :取第几列信息NF :取最后一列(NF-n) :取倒数第n列
正则表达式与操作符
awk同sed一样也可以通过模式匹配来对输入的文本进行匹配处理。 awk也支持大量的正则表达式模式,大部分与sed支持的元字符类似,而且正则表达式是玩转三剑客的必备工具。
awk支持的正则表达式元字符
BEGIN {} 在awk执行命令前做什么事情 BEGIN模块在awk读取文件之前就执行,BEGIN模式常常被用来修改内置变量ORS,RS,FS,OFS等的值。可以不接任何输入文件
代码语言:javascript复制[root@creditease awk]# awk 'BEGIN{print "=======start======"}{print $0}' awk.txt
=======start======
ABC#DEF#GHI#GKL$123
BAC#DEF#GHI#GKL$213
CBA#DEF#GHI#GKL$321
END {} 在awk执行命令结束后做什么事情 END在awk读取完所有的文件的时候,再执行END模块,一般用来输出一个结果(累加,数组结果)。也可以是和BEGIN模块类似的结尾标识信息。
代码语言:javascript复制[root@creditease awk]# awk 'BEGIN{print "=======start======"}{print $0}END{print "=======end======"}' awk.txt
=======start======
ABC#DEF#GHI#GKL$123
BAC#DEF#GHI#GKL$213
CBA#DEF#GHI#GKL$321
=======end======
统计/etc/services 文件的#号开头的行
代码语言:javascript复制awk '/^#/ {i=i ;print i}' /etc/services
或者
[root@creditease awk]# grep "^$" /etc/services |wc -l
17
[root@creditease awk]# sed -n '/^$/p' /etc/services |wc -l
17
[root@creditease awk]# awk '/^$/' /etc/services |wc -l
17
[root@creditease awk]# awk '/^$/{i=i 1}END{print i}' /etc/services
17
统计有多少个虚拟用户和普通用户
代码语言:javascript复制普通:awk '$NF~/bash/ {i=i }END{print i}' /etc/passwd
虚拟:awk '$NF!~/bash/ {i=i }END{print i}' /etc/passwd
求和计算
sum =sum $n
代码语言:javascript复制seq 10|awk '{sum=sum $1;print sum}'
[root@creditease awk]# seq 100|awk '{i=i $0}END{print i}'
5050