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)的更多相关文章

  1. Linux Bash命令杂记(tr col join paste expand)

    Linux Bash命令杂记(tr col join paste expand) tr命令 tr命令可以将输入的数据中的某些字符做替换或者是作删除 tr [-ds] STR d: 删除输入数据的中的S ...

  2. linux命令使用 cut/sort/uniq

    我记得之前去XX网面试的那个面试题是这样的:有个apache.log 文件文本内容如下:======================[niewj@centSvr ~]$ cat apache.log  ...

  3. Linux管线命令 - cut,grep,sort,uniq,wc,tee,tr,col,join,paste,expand,split,xargs

    在每个管线后面接的第一个数据必定是『命令』喔!而且这个命令必须要能够接受 standard input 的数据才行,这样的命令才可以是为『管线命令』,例如 less, more, head, tail ...

  4. cut sort uniq wc 一 文本处理工具

    cut cut是一个选取命令,就是将一段数据经过分析,取出我们想要的. 一般来说,选取信息通常是针对"行"来进行分析的,并不是整篇信息分析的. -c : 以字符为单位进行分割. c ...

  5. 转: windows 10使用原生linux bash命令行

    转: https://www.zybuluo.com/pandait/note/337430 windows 10使用原生linux bash命令行 linux bash windows-10 第一时 ...

  6. Linux Bash命令关于程序调试详解

    转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...

  7. win10开启 linux Bash命令(win10内置了linux系统支持)

    win10开启 Ubuntu linux Bash命令(win10内置了linux系统支持) 第一步: 先在设置→更新和安全→针对开发人员中选择"开发人员模式",点击后会下载&qu ...

  8. Win10系统开启Linux Bash命令行

    Win10系统开启Linux Bash命令行 导读 在Build2016上微软为了拉拢开发者发了个大招,那就是Win10一周年更新集成原生Linux Bash命令行功能,这将允许开发者或用户在Wind ...

  9. 【转】Linux(BASH)命令搜索机制

    原文网址:http://www.mike.org.cn/articles/linux-linux-bash-command-search-mechanism/ 转自:Eric Cheung: Linu ...

随机推荐

  1. 算法入门 - 链表的实现及应用(Java版本)

    之前我们学习了动态数组,虽然比原始数组的功能强大了不少,但还不是完全纯动态的(基于静态数组实现的).这回要讲的链表则是正儿八经的动态结构,是一种非常灵活的数据结构. 链表的基本结构 链表由一系列单一的 ...

  2. opencv入门系列教学(六)图像上的算术运算(加法、融合、按位运算)

    0.序言 这一篇博客我们将学习图像的几种算术运算,例如加法,减法,按位运算等. 1.图像加法 我们可以通过OpenCV函数 cv.add() 或仅通过numpy操作 res=img1+img2 res ...

  3. linux系统下查看svn服务是否启动,重启及设置开机重启

    Linux系统中svn服务是否启动,重启及设置开机启动   安装完svn服务器后虽然好用但是因为经常重启Linux服务器,每次重启完就要去手动启动svn服务器,很是麻烦,于是在网上找了一些方法后,自己 ...

  4. C# - 习题05_写出程序的输出结果o1.count

    时间:2017-08-24 整理:byzqy 题目:写出下列程序的输出结果: //原题程序如下: class Class1 { private static int count = 0; static ...

  5. sublime text build system automatic ctrl/cmd+B自动选择 python2 或 python3

    背景 我同时安装了 python2 和 python3 时,python 指向 python2,python3 才是 python3 默认情况下,在 Sublime 内 Ctrl/Cmd + B 运行 ...

  6. FastAPI(1)- 简单介绍

    前言 为啥要学它呢,因为学 Flask 的时候发现有人更推荐它代替 Flask,看了下介绍,感觉很强,而且也能拿来做平台,当然学起来!卷起来! 为什么要使用 FastAPI ? 日渐没落的是后端 HT ...

  7. 除PerfDog之外,还有什么性能测试工具。

    除PerfDog之外,还有什么性能测试工具. 高通的Snapdragon Profiler 下载地址:https://developer.qualcomm.com/software/snapdrago ...

  8. 记录一次sql注入绕过

    目标:http://www.xxxxx.net/temp.asp?ID=10359 通过 and 1=1 and 1=2 测试发现存在拦截 首先想到 and 空格 = 可能存在触发规则 一般遇到这种情 ...

  9. TP5更新数据成功,但判断结果不符

    thinkphp的CURD中,使用save方法时会出现一个奇怪的问题,即如果数据没有更新(与原数据相同),返回值判断为false.其实很久之前就发现了这个问题,一度以为是官方代码的问题,但是一直拖延到 ...

  10. ecshop商品自定义销量(虚拟销量)实现方法

    1.在sq执行语句   ALTER TABLE `ecs_goods` ADD `sales_volume_base` INT( 10 ) UNSIGNED NOT NULL DEFAULT '0' ...