Linux管道、重定向以及文本处理

开源的一个重要理念:不要重复发明轮子
很多开源软件都是现有软件、代码、功能的重新组合。
《大教堂与集市》

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

管道和重定向

Linux中,大多数命令都很简单,往往只实现一个或几个简单的功能,我们可以将不同功能的命令组合在一起使用,以达到完成某个复杂功能的目的。
Linux中,几乎所有命令的返回都是纯文本的,而纯文本形式的数据是绝大多数命令的输入格式,这就让协作成为可能。
Linux的命令行为我们提供了管道和重定向机制,多命令协作就是通过管道和重定向完成的。

  • 命令行shell数据流有以下定义:
名称 说明 编号 默认
STDIN 标准输入 0 键盘
STDOUT 标准输出 1 终端
STDERR 标准错误 2 终端

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

  • 通过管道和重定向可以控制CLI的数据流
  • 管道通常用来组合不同的命令,以实现更复杂的功能
  • 重定向通常用来保存命令的输出或错误信息
分类 关键字 定义 例子
重定向 > 将STDOUT重定向到文件(覆盖) echo "linuxcast.net" > outfile
重定向 >> 将STDOUT重定向到文件(追加) echo "linuxcast.net" >> outfile
重定向 2> 将STDERR重定向到文件(覆盖) echo "linuxcast.net" 2> outfile
重定向 2>&1 将STDERR与STDOUT结合 echo "linuxcast.net" 2>&1 outfile
重定向 < STDIN grep linuxcast < /etc/passwd
管道 | 将一个命令的STDOUT作为另一个命令的STDIN ls -l | grep linuxcast

一个更复杂的例子:查找用户linuxcast的Video文件,将查找错误重定向到null(丢弃)
find / -user linuxcast 2> /dev/null | grep Video

2 Linux命令行文本处理工具

文件浏览

  • cat/more/less/head/tail

基于关键字搜索-grep

该命令使用正则表达式搜索指定的纯文本文件或纯文本(管道)

  • -i 忽略大小写
  • -n 现实结果所在行数(文件)
  • -v 输出不带关键字的行(反选)
  • -Ax 输出的时候包含结果所在行之后的指定行数
  • -Bx 输出的时候包含结果所在行之前的指定行数

基于列处理文本-cut

  • -d 指定分割字符,默认为TAB
  • -f 指定输出的列号
  • -c 基于字符进行切割,固定长度

例:
cut -d: -f1 /etc/passwd:为分割符,显示第一列
grep linuxcast /etc/passwd | cut -d: -f3输出用户linuxcast的uid(第三列)
cut -c2-6 /etc/passwd第2-6个字符

文本统计-wc

  • -l 只统计行数line
  • -w 只统计单词word
  • -c 只统计字节数
  • -m 只统计字符数

文本排序-sort

  • -r 进行倒叙排序
  • -n 基于数字进行排序
  • -f 忽略大小写
  • -u 删除重复行
  • -tc 使用c作为分隔符分割为列进行排序
  • -kx 当进行基于指定字符分割为列的排序时,指定基于哪个列排序

删除重复行

  • sort -u 排序时删除重复行
  • uniq 删除重复的相邻行

文本比较-diff

  • -i 忽略大小写
  • -b 忽略空格数量的改变
  • -u 统一显示比较信息(一般用以生成patch文件)
    diff -u linuxcast linuxcast-new > final.patch

检查拼写-aspell

  • aspell check linuxcast
  • aspell list < linuxcast

处理文本内容-tr

translate

  • tr -d 'TMD' < linuxcast 删除关键字
  • tr 'a-z' 'A-Z' < linuxcast 转换大小写

搜索替换-sed

使用正则表达式处理文本文件

  • sed 's/linux/unix/g' linuxcast 替换linux为unix,/g全部替换
  • sed '1,50s/linux/unix/g' linuxcast 替换1-50行
  • sed -e 's/linux/unix/g' -e 's/nash/nash_su/g' linuxcast 多个正则表达式
  • sed -f sededit linuxcast 将匹配表达式保存在sededit文件中

Linux入门-7 Linux管道、重定向以及文本处理的更多相关文章

  1. Linux入门——初识Linux

    Linux入门——初识Linux 摘要:本文主要说明了Linux是什么,Linux发展历史,以及同Linux系统有关的一些基本知识. 简介 操作系统 Linux系统同Windows系统.Mac系统一样 ...

  2. linux(5)--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)

    本节中正则表达式的工具程序 grep,sed和awk是重点,也是难点!!! 先补充一下一. 管道| / 重定向> / xargs 如:1. 管道和重定向的区别:具体可以见 http://www. ...

  3. linux入门基础——linux软件管理RPM

    由于linux入门基础是基于CentOS解说的,讲的是CentOS上的软件包管理.ubuntu的软件包管理有这些:ubuntu软件包管理,包管理指南,ubuntu软件包管理. linux软件管理:RP ...

  4. linux入门—安装linux系统(1)

    一,linux介绍 linux是一套免费使用和自由传播的类Unix操作系统,简单的说就是不要钱,你可以随便使用,也可以分享给其他人. (剩下的详细内容,个人认为百度百科的内容比我瞎讲强的多,网址:ht ...

  5. Linux入门(二)Linux基本命令及基本操作

    1 常用Linux命令 图形界面进入到字符界面: ctrl+alt+F2~F6 字符界面进入到图形界面:ctrl +alt+F7 查看本机ip:  ifconfig  (windows是:ipconf ...

  6. Linux入门-8 Linux系统启动详解

    系统启动流程 BIOS MBR GRUB KERNEL INIT 单用户修改root密码 GRUB加密 系统启动流程 BIOS MBR: Boot Code 执行引导程序 - GRUB 加载内核 执行 ...

  7. Linux入门-6 Linux网络基本配置

    1. 网络基础知识 网络编址 IP编址 子网掩码 同一网络主机之间通信--MAC地址 不同网络之间的通信 路由 域名 DNS 基本网络参数 2. Linux网络基础配置 以太网连接 配置网络信息 网络 ...

  8. Linux入门-3 Linux磁盘及文件系统管理

    1. 磁盘基本概念 1.1 磁盘结构:盘片(单碟vs多碟).磁头(读写数据) 1.2 磁盘在Linux中的表示 1.3 分区概念 2 使用fdisk进行磁盘管理 3 Linux文件系统 mke2fs ...

  9. Linux入门之--Linux文件系统结构

    对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...

随机推荐

  1. 【树】Validate Binary Search Tree

    需要注意的是,左子树的所有节点都要比根节点小,而非只是其左孩子比其小,右子树同样.这是很容易出错的一点是,很多人往往只考虑了每个根节点比其左孩子大比其右孩子小.如下面非二分查找树,如果只比较节点和其左 ...

  2. hadoop-2.6.0-cdh5.4.5.tar.gz(CDH)的3节点集群搭建(含zookeeper集群安装)

    前言 本人呕心沥血所写,经过好一段时间反复锤炼和整理修改.感谢所参考的博友们!同时,欢迎前来查阅赏脸的博友们收藏和转载,附上本人的链接 http://www.cnblogs.com/zlslch/p/ ...

  3. leetcode5:subsets问题

    问题描述: Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subse ...

  4. IntelliJ IDEA 转移 C盘.IntelliJIdea 索引目录

    IntelliJ IDEA 索引目录默认路径是  C:\Users\用户\.IntelliJIdea 转移步骤 1. 将  C:\Users\用户\.IntelliJIdea 索引目录剪切到要移动到的 ...

  5. Http协议之Content-Length

    前言 http协议是互联网中最重要的协议之一,虽然看上去很简单,但是实际中经常遇到问题,我们就已经遇到好几次了.有长连接相关的,有报文解析相关的.对http协议不能一知半解,必须透彻理解才行.所以就写 ...

  6. MySQL中使用SHOW PROFILE命令分析性能的用法整理(配合explain效果更好,可以作为优化周期性检查)

    这篇文章主要介绍了MySQL中使用show profile命令分析性能的用法整理,show profiles是数据库性能优化的常用命令,需要的朋友可以参考下   show profile是由Jerem ...

  7. GridFS使用及配合nginx实现文件服务

    Mongodb下GridFS使用及配合nginx实现文件服务 一.GridFS简介 GridFS是mongodb下用来存储文件的一种规范,所有官方支持的驱动均实现了GridFS规范. Mongodb本 ...

  8. android recycleView 简单使用二---分割线

    转自:https://www.jianshu.com/p/b46a4ff7c10a RecyclerView没有像之前ListView提供divider属性,而是提供了方法 recyclerView. ...

  9. DButils分析

    package com.ldf.utils; import java.sql.Connection; public class DBUtils { private static String driv ...

  10. java poi处理新版xlsx后缀的excel

    jar包下载地址http://poi.apache.org/download.html#POI-3.17,我把下载文件中的所有jar包都导入项目中才能跑 参考以下博客 https://www.cnbl ...