命令组合

  • Linux中有着众多的命令,不同于直觉化的图形化窗口,我们并不能容易的理解Linux命令,但使用这些命令能让我们更接近系统底层调用的细节
  • Linux命令较之于图形化窗口更加强大,而且在shell中我们可以组合使用Linux命令,发挥更强的作用
  • 本文将借助一份示例来介绍一些简单的Linux命令组合

我的配置

  • Linux版本:Linux Mint
  • shell版本:zsh

示例

  • 假设有文件1.txt记录着西邮Linux兴趣小组几位大佬们悲惨的成绩(图一乐)
zzw   环境编程    33
rzj   环境编程    55
lsh   网络编程    33
hzn   网络编程    55
zzy   数据结构    33
zt    计算机组成原理  55
lsh   计算机组成原理  55
zzy   计算机组成原理  55
xjj   数据结构    33
  • 解释以下命令:
  1. cat 1.txt | awk '{print $1}' | sort | uniq -c | sort -r -n | head -n 5
  2. grep "rzj" > 2.txt < 1.txt
  3. echo "the answer is 42" > 1.txt

SHOW

  • 理解上面的命令对于Linux菜鸟是一种挑战,但我们可以一步一步的剖析以上命令,然后完全掌握它
  • 首先我们通过vim命令建立一份与示例相同的文档,然后来逐步分析

第一条

cat 1.txt | awk '{print $1}' | sort | uniq -c | sort -r -n | head -n 5

首先,我们尝试一下执行此条命令,看看会发生什么

输出很奇怪,让我们来好好分析一下

管道

  • 首先,我们会注意到多个命令之间是通过 ‘|’(管道符) 来连接的,‘|’即‘管道’,要理解这个复杂的命令,我们就要首先理解什么是管道

  • 在前后两个命令通过管道相连后,就产生了输入输出上的连接
  • 左侧命令向标准输入写入,右侧从标准输入读取,那么这两个命令就可以形成一个管道
  • 管道命令只处理前一个命令的正确输出,不处理错误输出
  • 管道也称管道重定向,与重定向(‘>’)有一些差别

每条命令仅提及所使用到的部分,不会详细讲述


cat

cat命令在man手册的定义为:

concatenate files and print on the standard output

此处仅使用了cat的基础用法

cat 1.txt

执行后效果为将1.txt的内容显示到标准输出也就是当前的shell中

awk

awk在man手册中名为gawk(gawk是awk的GUN实现),定义为:

pattern scanning and processing language

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具
此处对awk的用法为

awk '{print $1}'

即每行按空格或TAB分割,输出文本中的1项
需要注意的是,从这里开始管道已经发挥作用,awk接受的正是cat的 标准 正确 输出

sort


man手册中对sort的定义为:

sort lines of text files
  • 此处对sort的使用没有附加任何命令行参数,其作用为:
  • 以默认的方式将文本文件的第一列以 ASCII 码的次序排列,并将结果输出到标准输出(此处sort接受的输入依旧是前一个命令awk的标准正确输出,往后不再赘述)

uniq


mam手册中对uniq的定义为:

report or omit repeated lines

其-c(count)命令行参数定义为:

prefix lines by the number of occurrences

所以,对于uniq -c的理解并不难

sort -r -n


此处使用了sort的两个命令行参数
man手册对-r(reverse)的定义为:

reverse the result of comparisons

-n(numric-sort):

compare according to string numerical value
  • -r就是反转排序,不难理解
  • -n是按照数值排序,在此处也就是按照姓名前的数字大小排序,因为此处都是10以内的数字,所以并未凸显出-n的特性
  • 若a的出现次数为10次,b为3次,如果不添加-n,就会出现3比10大的现象,因为sort此时只会关注两个数字的第一位,即3>1

head


终于来到最后一个命令
man手册对head的定义为:

output the first part of files

-n(lines NUM) 的定义为:

print the first NUM lines instead of  the  first  10;
with  the leading '-',
print all but the last NUM lines of each file

由上可知

head -n 5为打印前五行
head -n -5为打印除后5行外全部内容

至此,我们已经可以理解第一条的全部内容,其重点为管道文件处理

第二条

grep "rzj" > 2.txt < 1.txt

重定向

第二条相比于第一条简短了很多,但还是包含着奇怪的符号

  • ‘>’ 与 ‘<’
    这两个符号是重定向符号,与管道重定向类似,依旧是操作输入与输出
    在此处该命令可视为
command > 2.txt < 1.txt

等同于

command < 1.txt > 2.txt

即使用command命令操作1.txt并将产生的副本输出到2.txt,1.txt的内容保持不变

grep

man手册对其定义为:

print lines that match patterns

关于grep的完整使用此处不做提及,针对此条定义我们已经可以理解第二条命令:
即在1.txt中寻找到包含特定字符的一行,并将获得的结果保存到2.txt

第三条

echo "the answer is 42" > 1.txt


man手册对echo的定义为:

display a lint of text

此处使用>输出重定向将echo的标准输出输入到了1.txt之中,覆写了1.txt的原有内容
(如果使用>>就不会覆写1.txt的内容,而是将echo的标准输出追加到1.txt的末尾)


参考:

  1. 每天学点Linux命令之grep 和 wc命令 — !管道命令!
  2. Linux Shell管道详解
  3. linux sort 命令详解
  4. Linux Shell重定向(输入输出重定向)精讲
  5. Linux命令大全
  6. man手册

Linux Shell中的简单命令组合使用相关推荐

  1. linux shell 中的sleep命令

    开始还以为是这样的语法: sleep(1), 后面发现是: linux shell 中的sleep命令 分类: LINUX 在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小 ...

  2. [linux运维]1@linux shell中的实用命令

    函数传参 shell中如何写一个函数呢? 这个问题, 首先说, shell中的函数, 在方法体里, 没有形参, 都是通过默认的特殊值获得的, 比如$1, $2, 参数的数量用. 而传参呢, 也是通过方 ...

  3. linux shell中的eval命令

    语法:eval cmdLine eval会对后面的cmdLine进行两遍扫描,如果第一遍扫描后,cmdLine是个普通命令,则执行此命令:如果cmdLine中含有变量的间接引用,则保证间接引用的语义. ...

  4. linux if else 格式,linux shell中 if else以及大于、小于、等于逻辑表达式

    在linux shell编程中,大多数情况下,可以使用测试命令来对条件进行测试,这里简单的介绍下,方便需要的朋友 比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示 ...

  5. Linux shell中在vim打开的文件中查找关键字

    linux shell中使用vi命令打开文本文件后,如果需要查找字符,可在normal模式下直接按"/"进入查找模式,输入要查找的字符并按下回车,vim会跳到第一个匹配的位置. 按 ...

  6. Day25 linux shell中的特殊符号与命令

    2019独角兽企业重金招聘Python工程师标准>>> linux shell中的特殊符号 *:代表零个或多个任意字符 ?:只代表一个任意字符,不管是数字还是字母,只要是一个字符,都 ...

  7. linux shell中的命令自动补全(compgen complete)与 命令行参数解析

    linux shell中的命令自动补全(compgen complete)与 命令行参数解析 标签: shell脚本 2013-12-31 21:56 6661人阅读 评论(6) 收藏 举报 分类: ...

  8. linux脚本添加source,shell中的source命令的巧妙用法

    首先,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录.例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如sourc ...

  9. linux判断目录是否存在命令,linux shell 中判断文件、目录是否存在的方法

    本文主要介绍了linux shell 中判断文件.目录是否存在的方法,分享给大家 -e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为 ...

  10. Linux shell 中的数组和关联数组

    写在前面的话 我用开始废柴了,这个又是写给我自己看的了. 普通数组 1.数组的定义 在Linux shell中定义一个普通的数组很简单,首先我们先给数组命名(当然要符合所有的命名规则咯).定义数组的一 ...

最新文章

  1. debian10 apache2使用ssl
  2. CCF发布2020-2021中国计算机科学技术发展报告
  3. 【机器学习基础】5种数据同分布的检测方法!
  4. HDU - 5381 The sum of gcd(莫队/线段树区间合并)
  5. 收集一些 有效的算法
  6. LeetCode 2132. 用邮票贴满网格图(DP/二维差分)
  7. C语言printf 和 scanf 用法
  8. 《手把手教你》系列基础篇之4-python+ selenium自动化测试-xpath使用(详细教程)
  9. [Java] 蓝桥杯ALGO-100 算法训练 整除问题
  10. 快手活跃用户预测_哈工大团队解决方案
  11. JQuery学习记录——jQuery对象和DOM对象的转换
  12. 如何自学python-如何自学Python编程呢?老男孩Python学习方法
  13. DevExpress lookupedit下拉列表不显示内容的问题
  14. Software--Data Visual 数据可视化
  15. 【linux系统学习笔记】Linux系统初识
  16. 基于单片机的音乐盒系统设计(#0435)
  17. 计算机时间无法更改,电脑时间不能修改|系统时间改不了 四个解决方法
  18. c语言中字符型char数据在内存中占,互联网常识:在c语言中char型数据在内存中的储存形式为什么...
  19. [转载] 过 DNF TP 驱动保护
  20. vue 时间格式总结及转换

热门文章

  1. 快速实现ARM和DSP的通信和协同工作
  2. python连连看小游戏_python之自动化连连看脚本-第一关不动-小记
  3. BZOJ2339[HNOI2011]卡农——递推+组合数
  4. ASM的普通盘转AFD
  5. Neverland Test 2.0
  6. 三级网络技术--宽带接入技术--无线接入技术、光纤接入技术
  7. 速记JVM内存模型和垃圾回收策略
  8. ucserver admin.php,Discuz!X3.2 升级后ucenter、uc_server正确密码却无法登录后台的解决方法...
  9. Arnold阿诺德电影级渲染器完全教学
  10. 问卷调查报告html,问卷调查报告格式优秀范文