Linux Bash命令杂记(cut sort uniq wc tee)
Linux Bash命令杂记(cut sort uniq wc tee)
数据流重定向
标准输入(stdin):代码为0,使用<或<<;
标准输出(stdout):代码为1,使用>或>>;
标准错误输出(stderr):代码为2,使用2>或2>>;
>:覆盖的方式,>>:追加的方式
如果想要一般输出与错误输出同时输入到某一个文件,如果采取如下的方式进行输出是错误的:
输出数据 1> list 2> list
如果按照上面的方式输出到list文件中时而没有采用特殊的语法,会因为两个输出进程的同步问题,导致正确的数据与错误的数据可能会交叉的输入到list文件中。正确的方式应该如下:
输出数据 > list 2>&1
# 或者是
输出数据 &> list
命令执行&& ||
cmd1 && cmd2
若cmd1执行完毕且正确执行($?==0),则执行cmd2
若cmd1执行完毕且错误执行($?!=0),则不执行cmd2
cmd1 || cmd2
若cmd1执行完毕且执行正确($?==0),则不执行cmd2
若cmd1执行完毕且执行错误($?!=0),则执行cmd2
cut命令
cut命令按行数据进行处理,常用的方式如下:
#参数 -d -f(组合使用)
输出数据 | cut -d '分个字符' -f fields
# 例
str=ni:hao:ma:?
echo $str | cut -d ':' -f 2
表示将echo出的str字符串按照':'字符分割,且取第2个字段
得到的结果是
hao
# 补充
-f 1,3 代表取第1和第3字段,输出 ni:man
-f 1-3 取1到3字段,输出 ni:hao:ma
# 参数 -c
输出数据 | cut -c 字符范围
# 例
str=hello
echo $str | cut -c 1
输出
h
# 补充
-c 1-,输出 hello
-c 1-3,输出 hel
sort命令
head -4 /etc/passswd
# output
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
我们可以看到并没有按照首字母排序
head -4 /etc/passwd | sort
# output
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
我们可以看到已经按照首字母排序了
同样,我们可以指定想按照哪一个字段来排序,
head /etc/passwd | sort -t ':' -k 3
# 不看前4行了,准备输出所有行
# 将输出按照类型':'分割(-t ':'),并且取第3个字段(-k 3)
# 然而此时的字段依然是按照字符进行,如本测试机上输出的结果注意看第二行:
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
# 注意第三个字段,11跑到了2前面去了,因为字符串11排在2前面
此时我们需要加上 -n 参数提示按照数字进行
head /etc/passwd | sort -t ':' -k 3 -n
last命令
# 该命令用来列出目前与过去登录系统的用户相关信息
last
# output
root tty1 Mon Mar 12 18:33 still logged in
reboot system boot 3.10.0-693.17.1. Mon Mar 12 18:33 - 19:02 (00:29)
root tty1 Sat Mar 10 20:18 - 20:18 (00:00)
reboot system boot 3.10.0-693.17.1. Sat Mar 10 20:18 - 20:18 (00:00)
root tty1 Fri Mar 9 19:10 - 20:50 (01:40)
...
其中:
第一列:用户名
第二列:终端位置。(pts/0通过ssh或者telnet远程连接的用户,tty:直接连接到计算机或者本地用户)
第三列:登陆IP或者内核(看到0.0或者什么都没有,意味着用户通过本地终端连接,除了重启,内核版本会显示在状态中)
第四列:开始时间(如:sun apr 3 :四月三号星期天)
第五列:结束时间(still login in 还未退出,down:直到正常关机,crash:直到强制关机)
第六列:持续时间
uniq命令
last | cut -d ' ' -f 1 | sort | uniq
# 先取用户名,然后排序,最后去重
# output
reboot
root
wtmp
zhen
# 加上 -c 显示统计
last | cut -d ' ' -f 1 | sort | uniq -c
# output
1
27 reboot
26 root
1 wtmp
3 zhen
务必注意,uniq命令是通过叠加去重相邻的字符串,如果你不首先进行排序,那么会出现下面的情况:
1 root
1 reboot
1 root
1 reboot
1 root
1 reboot
1 root
1 reboot
1 zhen
1 root
1 reboot
...
wc命令
wc [-lwm]
-l: 仅列出行
-w: 仅列出多少个英文单词
-m: 仅列出多少个字符
head /etc/passwd | wc
# output
10 10 385
# 分别代表行数,词数,字符数(这里10个“词”应该是因为每一行没有空格的原因,wc统计是按空格来分词的)
tee双向重定向
由前面的数据流我们可以知道,我们在将数据定向时,如果不采取特殊的操作,数据要么输出到屏幕,要么输出到文件或者是设备中,没有办法,既输出到屏幕有输出到文件中;又或者是,我们想要对数据进行处理存放到一个文件中,但是同时对原始数据又存到另一个文件中。使用tee命令,我们就可以做到。
例如,我们使用last命令首先要把数据存放到last.log中,同时要对用户去重并输出到屏幕上:
last | tee [-a 追加] last.log | cut -d ' ' -f 1 | sort | uniq
# output
reboot
root
wtmp
zhen
# 同时我们打开last.log文件可以看到没有做任何处理的原始数据
root tty1 Mon Mar 12 18:33 still logged in
reboot system boot 3.10.0-693.17.1. Mon Mar 12 18:33 - 19:29 (00:56)
root tty1 Sat Mar 10 20:18 - 20:18 (00:00)
reboot system boot 3.10.0-693.17.1. Sat Mar 10 20:18 - 20:18 (00:00)
root tty1 Fri Mar 9 19:10 - 20:50 (01:40)
...
Linux Bash命令杂记(cut sort uniq wc tee)的更多相关文章
- Linux Bash命令杂记(tr col join paste expand)
Linux Bash命令杂记(tr col join paste expand) tr命令 tr命令可以将输入的数据中的某些字符做替换或者是作删除 tr [-ds] STR d: 删除输入数据的中的S ...
- linux命令使用 cut/sort/uniq
我记得之前去XX网面试的那个面试题是这样的:有个apache.log 文件文本内容如下:======================[niewj@centSvr ~]$ cat apache.log ...
- Linux管线命令 - cut,grep,sort,uniq,wc,tee,tr,col,join,paste,expand,split,xargs
在每个管线后面接的第一个数据必定是『命令』喔!而且这个命令必须要能够接受 standard input 的数据才行,这样的命令才可以是为『管线命令』,例如 less, more, head, tail ...
- cut sort uniq wc 一 文本处理工具
cut cut是一个选取命令,就是将一段数据经过分析,取出我们想要的. 一般来说,选取信息通常是针对"行"来进行分析的,并不是整篇信息分析的. -c : 以字符为单位进行分割. c ...
- 转: windows 10使用原生linux bash命令行
转: https://www.zybuluo.com/pandait/note/337430 windows 10使用原生linux bash命令行 linux bash windows-10 第一时 ...
- Linux Bash命令关于程序调试详解
转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...
- win10开启 linux Bash命令(win10内置了linux系统支持)
win10开启 Ubuntu linux Bash命令(win10内置了linux系统支持) 第一步: 先在设置→更新和安全→针对开发人员中选择"开发人员模式",点击后会下载&qu ...
- Win10系统开启Linux Bash命令行
Win10系统开启Linux Bash命令行 导读 在Build2016上微软为了拉拢开发者发了个大招,那就是Win10一周年更新集成原生Linux Bash命令行功能,这将允许开发者或用户在Wind ...
- 【转】Linux(BASH)命令搜索机制
原文网址:http://www.mike.org.cn/articles/linux-linux-bash-command-search-mechanism/ 转自:Eric Cheung: Linu ...
随机推荐
- 六、Abp vNext 基础篇丨文章聚合功能上
介绍 9月开篇讲,前面几章群里已经有几个小伙伴跟着做了一遍了,遇到的问题和疑惑也都在群里反馈和解决好了,9月咱们保持保持更新.争取10月份更新完基础篇. 另外番外篇属于 我在abp群里和日常开发的问题 ...
- win7上帝模式详解
最近,Windows7"GodMode"(上帝模式)被国内各大网站和论坛炒得沸沸扬扬."GodMode"始见于国外网站"GeekInDisguise& ...
- k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-4
部署kubelet 1.二进制包准备 将软件包从linux-node1复制到linux-node2中去. [root@linux-node1 ~]# cd /usr/local/src/kuberne ...
- leetcode 位运算异或
1. 只出现一次的数字(136) 异或的性质总结: 相异为1,相同为0: a ^ a = 0; 0 ^ a = a; 如果 a ^ b = c 成立,那么a ^ c = b 与 b ^ c = a 均 ...
- springMVC学习总结(一) --springMVC搭建
springMVC学习总结(一) --springMVC搭建 搭建项目 1.创建一个web项目,并在项目中的src文件夹下创建一个包com.myl.controller. 2.添加相应jar包 3.在 ...
- 机器学习之支持向量机(python)
参考链接:https://blog.csdn.net/weixin_33514582/article/details/113321749.https://blog.csdn.net/weixin_44 ...
- vue-过滤器(filter)的使用详解
前言 Vue 允许我们在项目中定义过滤器对我们页面的文本展示进行格式的控制,本文就来总结一下过滤器在项目中的常见使用方法. 正文 1.局部过滤器的注册 (1)无参局部过滤器 <div id=&q ...
- 数组字符串json之间的相互转换
数组转字符串 var arr = [1,2,3,4,'巴德','merge']; var str = arr.join(','); console.log(str); // 1,2,3,4,巴德,me ...
- Spring Cloud Gateway 学习+实践
官网上给出的Spring Cloud Gateway特性如下图所示: 翻译过来就是: 基于 Spring Framework 5 ,Project Reactor 以及 Spring Boot 2.0 ...
- 【转】asp.net core环境变量详解
asp.net core环境变量详解 环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的环境 ...