Linux 文本内容管理和文件查找
文本内容管理和文件查找
1、文本内容管理命令
1.1 文本内容排序
sort #默认升序排序,不是按数值大小排序的
-n #根据数值大小进行排序
-r #逆序排序
-t #字段分隔符
-k #以哪个字段为关键字进行排序
-u #去重,排序后相同的行只显示一次
-f #排序时忽略字符大小写
uniq #将重复的行只显示一遍(连续且完全相同方为重复)
-c #显示文件中行重复的次数
-d #只显示重复的行
-u #只显示未重复的行
1.2 文本内容统计
#文本内容统计
wc #文本内容统计
-l #显示行数
-w #显示单词数
-c #显示字节数
#文件大小统计
du #查看文件或目录占用的磁盘空间大小
-h #以人类友好的方式显示大小
-s #显示总的占用空间大小
#磁盘空间统计
df #报告文件系统磁盘空间使用情况
-h #以人类友好的方式显示大小
-i #显示inode信息
-T #查看文件系统类型
1.3 文本内容过滤
cut截取文本内容
cut #截取文本内容
-d '' #指定字段分隔符,默认是空格
-f #指定要显示的字段
-f 1,3 #显示第1个字段和第3个字段
-f 1-3 #显示第1个字段到第3个字段
awk基于列的文本报告工具
awk #基于列的文本报告工具
语法:awk [选项] '匹配模式 {执行动作}'
-F '' #指定分隔符,可以使用正则表达式[]指定多个分隔符
-v OFS='' #指定打印时的分隔符
执行动作:
'{print $#}' #选择打印第#列,$0代表所有列,$NF代表最后1列
匹配模式:
'/关键字/' #匹配关键字的行,支持正则表达式
'/关键字1/,/关键字2/' #匹配从关键字1到关键字2中间所有的行
'/关键字1/;/关键字2/' #匹配从关键字1和关键字2的行
'NR==1' #匹配第1行
'NR>=10' #匹配行数大于10的所有行并显示行号
'$1==1' #匹配第1列的值等于1的行
'$1>=10 && $1<=20' #匹配第1列的值大于等于10并小于等于20的行
'$1>=10 || $3!=20' #匹配第1列的值大于等于10或者第3列的值不等于20的行
'$NF~"/sbin/nologin"' #匹配最后1列字符为/sbin/nologin的行
'$NF!~"/sbin/nologin"' #匹配最后1列字符不为/sbin/nologin的行
语法示例:
#使用:为分隔符分割/etc/passwd文件中的内容,按照想要的格式打印出来
awk -F ':' '{print "第一列:"$1,"第二列:"$2,"第三列:"$3}' /etc/passwd
#使用:为分隔符分割/etc/passwd文件中的内容,按照想要的格式打印出来
awk -F ':' -v OFS='-' '{print $1,$2,$3}' /etc/passwd
#使用:或/或:/或多个:或多个/或多个:/为分隔符分割/etc/passwd文件中的内容,打印出第1列和第6列
awk -F '[:/]+' '{print $1,$6}' /etc/passwd
grep文本过滤
grep #搜索文本内容,并将匹配的内容所在一整行都显示出来
#支持使用正则表达式来过滤文本
--color #匹配到的内容高亮显示
-i #忽略大小写
-w #强制模式,完全匹配字词
-n #显示匹配到的内容的行号
-c #显示匹配到的内容一共有多少行
-v #显示没有被模式匹配到的行
-o #只显示被模式匹配到的字符串
-E #使用扩展正则表达式。grep -E相当于使用egrep
-q #静默模式,不向屏幕输出任何信息
-A 1 #被模式匹配到的内容以及其后面1行的内容都显示出来
-B 1 #被模式匹配到的内容以及其前面1行的内容都显示出来
-C 1 #被模式匹配到的内容以及其前后的行各显示1行
-r #递归搜索每个目录下的所有文件的文本内容,忽略链接文件
-R #递归搜索每个目录下的所有文件的文本内容,不忽略链接文件
egrep #基于正则表达式查找文件内容
fgrep #不支持正则表达式,执行速度快
sed文本过滤和流编辑器
sed #基于行的过滤和转换文本的流编辑器
语法:sed [选项] '[过滤条件和sed指令]' [输入文件]
-n #取消默认sed输出,用于过滤文本内容
-r #使用扩展正则表达式
-e #一条语句执行多条sed指令
-i #修改文件内容
过滤条件:
# # '#' 实际为数字,表示第几行
$ #最后一行
/regexp/ #按照匹配规则匹配指定内容,regexp表示正则匹配
, #间隔符号,表示从条件一到条件二
! #取反,在指令的前面使用表示条件取反
| #或,注意使用时需要转义
& #引用匹配到的整个字符串
\# # '#' 实际为数字,表示引用前面()中正则匹配的字符串,第几个()就是数字几
sed指令:
a #追加,向匹配行后面插入内容
i #插入,向匹配行前插入内容
c #更改,更改匹配行的内容
d #删除,删除匹配行的内容
s #替换,替换掉匹配的内容
g #全局替换,一般和s一起使用
p #打印,打印出匹配的内容,通常与-n选项一起使用
= #用来打印被匹配的行的行号
n #读取下一行,遇到n时会自动跳入下一行
r\w #读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件
{} #{}中可以存放指令,基于前面过滤结果再次做处理,用于条件过滤后
; #分割多个指令,基于前面指令再次做处理,用于指令操作后
语法示例:
#在第3行下一行添加hello字符串,3表示行号
sed '3a hello' file
#在匹配到关键字所在行的下一行添加hello字符串,如果匹配到多个test123则都会添加
sed '/关键字/a hello' file
#在最后一行后新增一行添加hello字符串
sed '$a hello' file
#在第3行前一行添加hello字符串
sed '3i hello' file
#在匹配到关键字所在行的前一行添加hello字符串,如果匹配到多个关键字则都会添加
sed '/关键字/i hello' file
#在最后一行的前一行插入hello字符串
sed '$i hello' file
#将文件的第一行内容替换为hello字符串
sed '1c hello' file
#将匹配到关键字的整行替换为hello字符串
sed '/关键字/c hello' file
#将最后一行内容替换为hello字符串
sed '$c hello' file
#删除第四行
sed '4d' file
#从第一行开始删除,每隔2行就删掉一行
sed '1~2d' file
#删除1到2行
sed '1,2d' file
#删除1到2之外的所有行
sed '1,2!d' file
#删除从匹配关键字的行到最后一行
sed '/关键字/,$d' file
#删除匹配到关键字的行及其后面一行
sed '/关键字/,+1d' file
#删除空行,注意//中使用的是正则表达式
sed '/^$/d' file
#删除不匹配关键字1或关键字2的行,/test|abc/表示匹配test或abc,!表示取反
sed '/关键字1\|关键字2/!d' file
#删除1到3行中,匹配关键字的行
sed '1,3{/关键字/d}' file
#将原字符串替换为新字符串,默认只替换每行匹配到的第一个
sed 's/原字符串/新字符串/' file
#将原字符串替换为新字符串,替换每行匹配到的所有
sed 's/原字符串/新字符串/g' file
#将原字符串替换为新字符串,替换每行匹配到的第二个
sed 's/原字符串/新字符串/2' file
#匹配有#号的行,替换匹配的行中逗号后的所有内容为空
sed '/#/ s/,.*//g' file
#替换所有注释的行为空行,然后删除空行,替换和删除操作中间用分号隔开
sed 's/^#.*//;/^$/d' file
#将以数字开头的行的数字用括号括起来,&符号代表匹配到的内容
sed -r 's/^[0-9]+/(&)/' file
#匹配每行逗号分割的字符串重新将字符串进行排序,原本的第三列变成第一列
sed -r 's#(.*),(.*),(.*)#\3,\2,\1#g' file
#匹配第1行和第3行逗号分割的字符串重新将字符串进行排序
sed -r '1s#(.*),(.*),(.*)#\3,\2,\1#g;3s#(.*),(.*),(.*)#\3,\2,\1#g' file
#打印第2行
sed -n '2p' file
#打印第2行到第4行
sed -n '2,4p' file
#搜索包含关键字的行
sed -n '/关键字/p' file
#打印从第一个关键字到第二个关键字中间所有的行
sed -n '/第一个关键字/,/第二个关键字/p' file
#打印从匹配关键字的行到最后一行的内容
sed -n '/关键字/,$p' file
#打印最后一行的行号(即文件有多少行,和wc -l功能类似)
sed -n "$=" file
#打印匹配关键字的行的行号
sed -n '/关键字/=' file
#将file2的内容,追加在文件file中每个匹配关键字的行下面
sed '/关键字/r file2' file
#将file中每个匹配到关键字的行,写入到新文件newfile中
sed '/关键字/w newfile' file
2、文件查找命令
find #实时查找,精确性强,遍历指定目录中所有文件完成查找,
#查找速度慢,支持众多查找标准。
语法:
find 查找路径 [OPTION...] [查找标准] [查找到以后的处理动作]
查找路径,默认为当前目录
查找标准,默认为指定路径下的所有文件
-name 'filename' #对文件名作精确匹配.支持glob通配符机制
-iname 'filename' #文件名匹配时不区分大小写
-regex pattern #基于正则表达式进行文件名匹配,以pattern匹配整个文件路径字符串,而不仅仅是文件名称
-user username #根据属主来查找
-group groupname #根据属组来查找
-uid #根据UID进行查找,当用户被删除以后文件的属主会变为此用户的UID
-gid #根据GID进行查找,当用户被删除以后文件的属组会变为此用户的GID
-nouser #查找没有属主的文件.用户被删除的情况下产生的文件,只有uid没有属主
-nogroup #查找没有属组的文件.组被删除的情况下产生的文件,只有gid没有属组
-type #根据文件类型来查找(f,d,c,b,l,p,s)
-size #根据文件大小进行查找。如1k、1M,+10k、+10M,-1k、-1M,+表示大于,-表示小于
-mtime #修改时间
-ctime #改变时间
-atime #访问时间
+5 #5天前
-5 #5天以内
-mmin #多少分钟修改过
-cmin #多少分钟改变过
-amin #多少分钟访问过
+5 #5分钟前
-5 #5分钟以内
-perm mode #根据权限精确查找
-perm -mode #查找至少包含指定权限的文件
#组合条件:
-a #和
-o #或
-not #否
! # ! 和-not含义一样
#处理动作:默认为显示到屏幕上
-print #显示
-ls #类似ls -l的形式显示每一个文件的详细信息
-fls /path/to/somefile #查找到的所有文件的长格式信息保存至指定文件中
-delete #删除查找到的文件
-ok COMMAND {} \; #对查找到的每个文件执行COMMAND,每次操作都需要用户确认
-exec COMMAND {} \; #对查找到的每个文件执行COMMAND,操作不需要确认
注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令,而有些命令不能接受过多参数,此时命令执行可能会失败。而xargs可规避此问题。
| xargs #通过管道将查找到的内容给xargs处理,xargs会把内容进行拆分,拆分完毕后将内容作为参数交给后面的命令执行。