多命令协作:管道及重定向

  • 在Linux中,大多数命令都很简单,每个命令往往只实现一个或几个很简单功能.
  • 我们可以通过将不同功能的命令组合起来一起使用,达到完成某个复杂功能的目的
  • CLI下几乎所有的命令返回的都是纯文本,纯文本形式的数据又是绝大多数命令的输入格式

命令行shell的数据流有以下定义 :

名称 说明 编号 默认
STDIN 标准输入 0 键盘
STDOUT 标准输出 1 终端
STDERR 标准错误 2 终端

命令通过STDIN接收参数,通过STDOUT输出结果或STDERR输出错误

通过管道和重定向我们可以控制CLI的数据流

分类 关键字 定义 例子
重定向 > 将输出重定向到文件(覆盖) echo 'aaa' > fileName
重定向 >> 将输出重定向到文件(追加) echo 'aaa' >> fileName
重定向 2> 将错误重定向到文件(覆盖) ls nothere 2> fileName
重定向 2>&1 将错误和输出结合重定向到文件 ls nothere 2>&1 fileName
重定向 < 重定向输入 grep admin < /etc/passwd
管道 | 将一个命令的输出作为另一个命令的输入 ls -l | grep aaa

文本处理

文件浏览

  • cat 查看文件内容
  • more 以翻页形式查看文件内容(只能向下翻页)
  • less 以翻页形式查看文件内容(能上下翻页)
  • head 查看文件的开始10行(或指定行数)
  • tail 查看文件的结束10行(或指定行数)

基于关键字搜索

命令grep用以基于关键字搜索文本

例如

#在/etc/passwd 中搜索'aaaa'项
grep 'aaaa' /etc/passwd
#管道传值搜索
find / -user admin | grep Video 等于 grep Video (find的输出结果)

-i 在搜索时忽略大小写

-n 显示结果所在行数

-v 输出不带关键字的行,排除选项

-Ax 在输出的时候包含结果所在行之后的指定行数

-Bx 在输出的时候包含输出结果前几行

基于列处理文本

命令cut用以基于列处理文本内容

例如

#修剪指定列,显示passwd到位第1列,指定分隔符是‘:’
cut -d: -f1 /etc/passwd
#输出admin的信息,指定分隔符是:,并显示第3列
grep admin /etc/passwd | cut -d: -f3
#只显示第2到第6个字符
cut -c2-6 /etc/passwd

-d 指定分隔符

-f 指定输出列

-c 基于字符进行切割

文本统计

命令wc用以统计文本信息

-l 只统计行数

-w 只统计单词

-c 只统计字节数

-m 只统计字符数

文本排序

命令sort对文本内容进行排序

-r 进行倒序排序

-n 基于数字进行排序

-f 忽略大小写

-u 删除重复行

-t c 使用c作为分隔符分割为列进行排序

-k x 当进行基于指定字符分隔为列的排序时,指定基于那个列排序

删除重复行

命令sort -u 可以用来删除重复行

命令uniq用来删除重复的相邻行

文本比较

命令diff用以比较两个文件的区别

例如

#比较两个文件的区别
diff linux linux-new
#比较差异并生成文件
diff -u linux linux-new > final.patch

-i 忽略大小写

-b 忽略空格数量的改变

-u 统一显示比较信息[一般用以生成patch补丁文件]

拼写检查

命令aspell用以显示检查英文拼写

处理文本内容

命令tr用以处理文本内容

  • 删除关键字

    tr -d '敏感词' < linux

  • 转换大小写

    tr 'a-z' 'A-Z' < linux

搜索替换

命令sed用以搜索并替换文本

sed '正则表达式' 文件

例如

#将名为passwd文本里的cat替换成ac, g代表替换所有
sed 's/cat/ac/g' passwd

Linux入门基础(五):Linux管道,重定向,文本处理的更多相关文章

  1. Linux入门基础(一):Linux基本操作

    命令行BASH基本操作 Shell 用户不能直接操作内核,所以用户操作通过shell传递给内核 shell分为两种 : GUI 图形界面 (linux一般是GNOME) CLI 命令行界面 (linu ...

  2. Linux入门基础 #9:管道及重定向

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  3. Linux入门基础(三):Linux用户及权限基础

    用户基础 用户和组 每个用户都拥有一个userid 每个用户都属于一个主组,属于一个或多个附属组 每个组拥有一个groupid 每个进程以一个用户身份运行,受该用户可访问资源限制 每个可登陆用户拥有一 ...

  4. Linux入门基础(七):Linux软件管理基础

    源代码形式 绝大多数开源软件都是直接以源代码形式发布 源代码一般会被打包成tar.gz的归档压缩文件 程序源代码需要编译成为二进制形式之后才能够运行 源代码基本编译流程 : ./configure 检 ...

  5. Linux入门基础(四):Linux网络基本配置

    网络基础 ip编址 ip编址是一个双层编址方案(网络部分和主机部分),一个ip地址标识一个主机(或一个网卡接口) 现在应用最广泛的是IPv4编址,已经开始逐渐向IPv6编址切换 IPv4地址32位长, ...

  6. linux入门教程(五) Linux系统的远程登录

    首先要说一下,该部分内容对于linux初学者来讲并不是特别重要的,可以先跳过该章节,先学下一章,等学完后再回来看这一章. Linux大多应用于服务器,而服务器不可能像PC一样放在办公室,它们是放在ID ...

  7. Linux入门基础(六):Linux系统启动

    系统启动流程 BIOS MBR : Boot Code 执行引导程序-GRUB 加载内核 执行init runlevel BIOS BIOS(basic input output system),我们 ...

  8. Linux入门基础(二):Linux磁盘及文件管理系统

    磁盘管理 fdisk分区工具 只支持MBR分区 fdisk命令只有root用户能用 fdisk -l 列出所有安装磁盘及分区信息 fdisk /dev/sda (操作磁盘,按m可列出帮助界面,常用的操 ...

  9. Linux入门基础篇

    Linux入门基础篇 Linux诞生 Linux发行版本说明 Linux官方网站 Linux内核官方网站 比较有名的Linux发行版 虚拟机(Virtual Machine),一个虚拟的系统,安装在系 ...

随机推荐

  1. 用eval似乎会执行结果一次性返回,结果显示的是一行

    with open(r'商品资料','r',encoding='utf-8') as f1: lis_goods = eval(f1.read()) # 用eval似乎会执行结果一次性返回,结果显示的 ...

  2. randint(1,100) s.add(n) 集合的去重复性

  3. NTRIP协议学习(一)

    这篇博客讲得很清晰.  https://blog.csdn.net/sinat_19447667/article/details/67637167 可以参考的文献包括:<多系统GNSS实时数据质 ...

  4. hihoCoder1343 : Stable Members【BFS拓扑排序】

    题目链接:https://hihocoder.com/problemset/problem/1343 #1343 : Stable Members 时间限制:10000ms 单点时限:1000ms 内 ...

  5. C# 通过word模板动态生成Word

    object oMissing = System.Reflection.Missing.Value; Word._Application oWord = new Word.Application(); ...

  6. Lambda表达式学习(1)

    项目里面需要经常对一系列同类型集合进行操作 ,  如对集合进行增加元素 ,  删除集合的指定索引的元素等等.我们可以使用ArrayList来进行. 如 ArrayList stringArrayLis ...

  7. P2983 [USACO10FEB]购买巧克力Chocolate Buying

    题目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Chocolate Sto ...

  8. ZOJ 2017 Quoit Design 经典分治!!! 最近点对问题

    Quoit Design Time Limit: 5 Seconds      Memory Limit: 32768 KB Have you ever played quoit in a playg ...

  9. NYOJ-171 聪明的kk 填表法 普通dp

    题目链接: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=171 聪明的kk 时间限制:1000 ms  |  内存限制:65535 KB 难 ...

  10. EF 解除属性映射到数据库中 NotMappedAttribute无效解决办法

    可以通过NotMappedAttribute标记模型某个属性可以使该属性不必映射到数据库. public class Unicorn { public int Id { get; set; } [No ...