Linux文本工具命令
文本查看
文本查看类命令有 cat,tac,rev,more,less ,head,tail,tailf 等,这里着重介绍 cat ,head,tail 命令
cat命令
命令简介
cat 命令连接文件并打印到标准输出设备上,cat经常用来显示文件的内容
命令语法
cat [OPTION]... [FILE]...
命令选项
-E : 显示行结束符$ -n : 对显示出的每一行进行编号 -A : 显示所有控制符 -b : 非空行编号 -s : 压缩连续的空行成一行
示例
[root@centos7 ~]# cat -nA /etc/issue /etc/centos-release 1 \S$ 2 Kernel \r on an \m$ 3 $ 4 CentOS Linux release 7.5.1804 (Core) $
tac 命令则跟 cat 命令相反,用于将文件已行为单位的反序输出,即第一行最后显示,最后一行先显示
rev 命令将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出
more 命令分页查看文件,到底则退出,使用 -d 选项可以显示翻页及退出提示
less 命令一页一页地查看文件或STDIN输出,到底不退出可以继续往回翻
head命令
命令简介
head 命令用于显示文件的开头的内容。在默认情况下,head 命令显示文件的头10行内容
命令语法
head [OPTION]... [FILE]...
命令选项
-c # : 指定获取前#字节 -n # : 指定获取前#行 -# : 指定行数
示例
[root@centos7 ~]# head -c 3 /etc/passwd roo [root@centos7 ~]# head -3 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
tail命令
命令简介
tail 命令用于输入文件中的尾部内容。tail 命令默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入
命令语法
tail [OPTION]... [FILE]...
命令选项
-c # : 指定获取后#字节 -n # : 指定获取后#行 -# : 指定行数 -f : 跟踪显示文件fd新追加的内容,常用日志监控,相当于 --follow=descriptor -F : 跟踪文件名,相当于 --follow=name --retry
示例
[root@centos7 ~]# tail -n 2 /etc/issue /etc/passwd ==> /etc/issue <== Kernel \r on an \m ==> /etc/passwd <== centos:x:1500:1500::/home/centos:/bin/bash freebsd:x:1600:1600::/home/freebsd:/bin/bash
tailf 命令类似 tail –f,当文件不增长时并不访问文件
文本处理
文本处理命令主要有 tr(文本转换),cut(按列抽取文本),paste(合并文件),wc(统计数据),sort(文本排序),uniq(文本去重) 等
tr命令
命令简介
tr 命令可以对来自标准输入的字符进行替换、压缩和删除
命令语法
tr [OPTION]... SET1 [SET2]
命令选项
-t : 将SET2中的字符顺序替换SET1中的字符,无论SET1还是SET2哪个长,只替换对应的字符,多出的不替换 -c : 取反操作,取数据流中SET1中指定字符的补集 -d : 删除SET1中指定的字符,这里没有SET2 -s : 将SET1中指定的连续的连续重复的字符用单个字符替代,例如可以使用-s '\n'删除空行
需要注意的是,tr 不带选项时,将 SET2 中的字符顺序替换 SET1 中的字符,如果 SET1 的字符长度大于 SET2,那么将 SET1 中多出来的字符用 SET2 中的最后一个字符替换
可用字符集
[:alnum:] : 字母和数字
[:alpha:] : 字母
[:cntrl:] : 控制(非打印)字符
[:digit:] : 数字
[:graph:] : 图形字符
[:lower:] : 小写字母
[:print:] : 可打印字符
[:punct:] : 标点符号
[:space:] : 空白字符
[:upper:] : 大写字母
[:xdigit:]: 十六进制字符
\\ 反斜杠
\a 终端鸣响
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
示例
1. SET1 和 SET2 字符长度不相等时,不带参数和 -t 参数的区别
[root@centos7 ~]# echo "abcedf" | tr "abc" "12" 122edf [root@centos7 ~]# echo "abcedf" | tr -t "abc" "12" 12cedf [root@centos7 ~]# echo "abcedf" | tr "ab" "123" 12cedf [root@centos7 ~]# echo "abcedf" | tr -t "ab" "123" 12cedf
2. 删除压缩字符
[root@centos7 ~]# echo 'a1@3bcE' | tr -d -c '[:lower:]\n' abc [root@centos7 ~]# echo "thissss is a text linnnnnnne." | tr -s ' sn' this is a text line.
cut命令
命令简介
cut 命令显示文件或STDIN数据的指定列
命令语法
cut OPTION... [FILE]...
命令选项
-b : 仅显示行中指定范围的字节
-c : 仅显示行中指定范围的字符
-d DELIMITER: 指定字段的分隔符,默认的字段分隔符为 TAB
-f FILEDS : 显示指定字段的内容
# : 第#个字段
#,#[,#] :离散的多个字段,例如1,3,6
#-# :连续的多个字段, 例如1-6
也可以混合使用,例如1-3,7
-n : 与“-b”选项连用,不分割多字节字符;
--complement : 补足被选择的字节、字符或字段
--output-delimiter=STRING : 指定输出内容的字段分割符
示例
1. 显示 /etc/passwd 文件中的用户名,UID,GID,SHELL
[root@centos7 ~]# cut -d: -f1,3-4,7 --output-delimiter='===' /etc/passwd | head -3 root===0===0===/bin/bash bin===1===1===/sbin/nologin daemon===2===2===/sbin/nologin
2 . 显示指定字段的字符或者字节范围
N-:从第N个字节、字符、字段到结尾;
N-M:从第N个字节、字符、字段到第M个(包括M在内)字节、字符、字段;
-M:从第1个字节、字符、字段到第M个(包括M在内)字节、字符、字段。
[root@centos7 ~]# echo abcdefg | cut -c-3 abc [root@centos7 ~]# echo abcdefg | cut -c3-4 cd [root@centos7 ~]# echo abcdefg | cut -c5- efg
需要注意的是在 UTF-8 编码中,汉字占用三个字节(可用 hexdump -C查看,例如 echo “我 ”| hexdump -C)
[root@centos7 ~]# echo "你我他" | cut -b2- ½ 我他 [root@centos7 ~]# echo "你我他" | cut -b2- -n 我他
paste命令
命令简介
paste 命令合并两个文件同行号的列到一行
命令语法
paste [OPTION]... [FILE]...
命令选项
-d DELIMITER : 指定分隔符,默认用TAB
-s : 所有行合成一行显示
示例
[root@centos7 ~]# cat /tmp/f1 aa bb cc [root@centos7 ~]# cat /tmp/f2 11 22 [root@centos7 ~]# paste /tmp/{f1,f2} aa 11 bb 22 cc [root@centos7 ~]# paste -s /tmp/{f1,f2} aa bb cc 11 22
wc命令
命令简介
wc 命令用于计数单词总数、行总数、字节总数和字符总数
命令语法
wc [OPTION]... [FILE]...
命令选项
-c : 统计字节数 -l : 统计行数 -m : 统计字符数,这个标志不能与 -c 标志一起使用 -w : 统计字数,一个字被定义为由空白、跳格或换行字符分隔的字符串 -L : 打印最长行的长度
示例
[root@centos7 ~]# wc -l /etc/passwd 30 /etc/passwd
sort命令
命令简介
sort 命令将文件进行排序,并将排序结果标准输出。既可以从特定的文件,也可以从stdin中获取输入
命令语法
sort [OPTION]... [FILE]...
命令选项
-f : 忽略字符大小写 -r : 逆序 -t : 指明字段分隔符 -k : 指定字段为标准排序 -n : 以数值大小进行排序 -u : uniq,排序后去重 -o : 将排序后的结果存入指定的文件 -R : 随机排序
示例
1. 取出 /etc/passwd 文件中用户 UID最大的三行
[root@centos7 ~]# sort -t: -k3 -nr /etc/passwd | head -3 freebsd:x:1600:1600::/home/freebsd:/bin/bash centos:x:1500:1500::/home/centos:/bin/bash debian:x:1400:1400::/home/debian:/bin/bash
2. 班级里共有80个学生,随机点名
[root@centos7 ~]# seq 80 | sort -R | head -1
3. 排序结果重定向到原文件保存
sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort FILE > NEWFILE。但是,如果你想把排序结果输出到原文件中,用重定向可就不行了
[root@centos7 ~]# cat /tmp/f1 1 110 21 [root@centos7 ~]# sort -n /tmp/f1 > /tmp/f1 [root@centos7 ~]# cat /tmp/f1 [root@centos7 ~]#
可以看出 f1 文件内容竟然被清空了,使用 -o 选项能避免这种情况发生
[root@centos7 ~]# sort -n /tmp/f1 -o /tmp/f1 [root@centos7 ~]# cat /tmp/f1 1 21 110
4. -k 选项的高级用法
FStart.CStart Modifier,FEnd.CEnd Modifier -------Start----------,-------End-------- FStart.CStart 选项 , FEnd.CEnd 选项
这个语法格式可以被其中的逗号,分为两大部分, Start 部分和 End 部分。Start部分由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说 Start 部分的 FStart 和 .CStart 。 .CStart 也是可以省略的,省略的话就表示从本域的开头部分开始。FStart.CStart,其中 FStart 就是表示使用的域,而 CStart 则表示在 FStart 域中从第几个字符开始算“排序首字符”。同理,在 End 部分中,你可以设定 FEnd.CEnd,如果你省略 .CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将 CEnd 设定为0(零),也是表示结尾到“域尾”。
准备素材
[root@centos7 ~]# cat /tmp/f1 goole 110 5000 baidu 100 5000 guge 50 3000 sohu 100 4500
(1)从公司英文名称的第二个字母开始进行排序
[root@centos7 ~]# sort -t' ' -k 1.2 /tmp/f1 baidu 100 5000 sohu 100 4500 goole 110 5000 guge 50 3000
使用了 -k 1.2 ,表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。你会发现baidu因为第二个字母是a而名列榜首。sohu和 google第二个字符都是o,但sohu的h在google的o前面,所以两者分别排在第二和第三。guge只能屈居第四了
(2)只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序
[root@centos7 ~]# sort -t ' ' -k 1.2,1.2 -nrk 3,3 /tmp/f1 goole 110 5000 baidu 100 5000 sohu 100 4500 guge 50 3000
由于只对第二个字母进行排序,所以我们使用了 -k 1.2,1.2 的表示方式,表示我们“只”对第二个字母进行排序。(如果你问“我使用 -k 1.2 怎么不行?”,当然不行,因为你省略了End部分,这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序)。对于员工工资进行排 序,我们也使用了 -k 3,3 ,这是最准确的表述,表示我们“只”对本域进行排序,因为如果你省略了后面的3,就变成了我们“对第3个域开始到最后一个域位置的内容进行排序” 了
uniq命令
命令简介
uniq 命令用于报告或忽略文件中的重复行,一般与 sort 命令结合使用
命令语法
uniq [OPTION]... [INPUT [OUTPUT]]
命令选项
-c : 显示每行重复出现的次数 -d : 仅显示重复过的行 -u : 仅显示不曾重复的行
示例
统计访问网站次数ip的前三名
[root@centos7 ~]# cut -d' ' -f1 /var/log/httpd/access_log | sort | uniq -c | sort -nr | head 3