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

  • 在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. November 26th 2016 Week 48th Saturday

    All growth is a leap in the dark. 所有的成长都是黑暗中的一跃. But it is a dark and long night, I can't see any st ...

  2. 如何处理高并发情况下的DB插入

    1.  我们需要接收一个外部的订单,而这个订单号是不允许重复的 2.  数据库对外部订单号没有做唯一性约束 3.  外部经常插入相同的订单,对于已经存在的订单则拒绝处理 对于这个需求,很简单我们会用下 ...

  3. Mina使用总结(二)Handler

    Handler的基本作用,处理接收到的客户端信息 一个简单的Handler实现如下: package com.bypay.mina.handler; import java.util.Date; im ...

  4. 【记录】有趣的python模块记录

    1. paramiko: 基于SSH用于连接远程服务器并执行相关操作,公钥私钥登录等等

  5. Java阶段性总结与获奖感想

    一.获奖感想 这次能获得小黄衫,可以说是对我自己这半学期以来努力学习的一种肯定,也是激励我继续努力的动力. 首先,我要感谢给予我们耳目一新的学习方式的娄老师.我曾在我期望的师生关系中提到,我的高中班主 ...

  6. springboot整合mybatis将sql打印到日志

    在前台请求数据的时候,sql语句一直都是打印到控制台的,有一个想法就是想让它打印到日志里,该如何做呢? 见下面的mybatis配置文件: <?xml version="1.0" ...

  7. pandas数据结构:Series/DataFrame;python函数:range/arange

    1. Series Series 是一个类数组的数据结构,同时带有标签(lable)或者说索引(index). 1.1 下边生成一个最简单的Series对象,因为没有给Series指定索引,所以此时会 ...

  8. ASP.NET Core下载大文件的实现

    当我们的ASP.NET Core网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃.可以参考如下代码来避免这个问题. 关于此代码的几点说明: 将数据分成较小 ...

  9. ORM增删改查(django)

    单表操作: 一.添加 (1)方式一 from  mysite.models  import * def  add(request): book= Book(name="python" ...

  10. python3爬虫-下载网易云音乐,评论

    # -*- coding: utf-8 -*- ''' 16位随机字符的字符串 参数一 获取歌曲下载地址 "{"ids":"[1361348080]" ...