Linux入门-7 Linux管道、重定向以及文本处理
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 linuxcastaspell 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管道、重定向以及文本处理的更多相关文章
- Linux入门——初识Linux
Linux入门——初识Linux 摘要:本文主要说明了Linux是什么,Linux发展历史,以及同Linux系统有关的一些基本知识. 简介 操作系统 Linux系统同Windows系统.Mac系统一样 ...
- linux(5)--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)
本节中正则表达式的工具程序 grep,sed和awk是重点,也是难点!!! 先补充一下一. 管道| / 重定向> / xargs 如:1. 管道和重定向的区别:具体可以见 http://www. ...
- linux入门基础——linux软件管理RPM
由于linux入门基础是基于CentOS解说的,讲的是CentOS上的软件包管理.ubuntu的软件包管理有这些:ubuntu软件包管理,包管理指南,ubuntu软件包管理. linux软件管理:RP ...
- linux入门—安装linux系统(1)
一,linux介绍 linux是一套免费使用和自由传播的类Unix操作系统,简单的说就是不要钱,你可以随便使用,也可以分享给其他人. (剩下的详细内容,个人认为百度百科的内容比我瞎讲强的多,网址:ht ...
- Linux入门(二)Linux基本命令及基本操作
1 常用Linux命令 图形界面进入到字符界面: ctrl+alt+F2~F6 字符界面进入到图形界面:ctrl +alt+F7 查看本机ip: ifconfig (windows是:ipconf ...
- Linux入门-8 Linux系统启动详解
系统启动流程 BIOS MBR GRUB KERNEL INIT 单用户修改root密码 GRUB加密 系统启动流程 BIOS MBR: Boot Code 执行引导程序 - GRUB 加载内核 执行 ...
- Linux入门-6 Linux网络基本配置
1. 网络基础知识 网络编址 IP编址 子网掩码 同一网络主机之间通信--MAC地址 不同网络之间的通信 路由 域名 DNS 基本网络参数 2. Linux网络基础配置 以太网连接 配置网络信息 网络 ...
- Linux入门-3 Linux磁盘及文件系统管理
1. 磁盘基本概念 1.1 磁盘结构:盘片(单碟vs多碟).磁头(读写数据) 1.2 磁盘在Linux中的表示 1.3 分区概念 2 使用fdisk进行磁盘管理 3 Linux文件系统 mke2fs ...
- Linux入门之--Linux文件系统结构
对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...
随机推荐
- Oracle练习笔记
1 基本查询 SQL> --当前用户 SQL> show user USER 为 "SCOTT" SQL> --当前用户下的表 SQL> select * ...
- ActiveMQ:Exception occurred while processing this request, check the log for more information!
出现上面错误的原因有以下两种 1 jdk的版本和activemq的版本不符 安装完ActiveMQ之后,通过http://IP:8161登陆到控制台. 通过测试代码给服务端发送队列消息,在控制台点击q ...
- ftp&nginx搭建图片服务器
下面使用ftp+nginx搭建一个简单的服务器 ftp用于文件的传输 nginx提供http服务 nginx服务器的安装和配置可以参照之前的教程:nginx安装及其配置详细教程 下面介绍ftp服务的安 ...
- JavaScript数据结构-3.List
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- [PY3]——过滤数据——列表推导、filter()、itertools.compress()
问题 你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列 解决方案 最简单的过滤数据的方法,就是使用列表推导. 使用列表推导的一个潜在缺陷就是如果输入非常大的时候会产生一个非常大的结果集 ...
- 【angular5 项目积累总结】项目公共样式
main.css @font-face { font-family: 'wf_segoe-ui_normal'; src: local('Segoe UI'),url('../fonts/segoe- ...
- JavaScript的柯里化函数
柯里化,或者说部分应用,是一种函数式编程的技术,对于熟悉以传统方式编写 JavaScript 代码的人来说可能会很费解.但如果使用得当,它可以使你的 JavaScript 函数更具可读性. 更具可读性 ...
- IO实战-RandomAccessFile在本地实现伪断点续传
准备:在磁盘中 准备一个目录文件 实现:将该文件复制到目标路径中,关掉程序,再重新打开可以在原位置继续复制. 需求如下: 过程中显示文件的拷贝的百分比 复制过程中关掉程序. 重新启动该程序时,若上次没 ...
- java核心技术-内部类
高级类特性-(类的成员之一:内部类) 内的成员之一:内部类(属性.方法.构造器.代码块) 可以有四种权限访问修饰符 注意:外部类 只有两种 public 和 default 定义 : 可以将一个类的定 ...
- NIO与Socket
一.Socket 的使用 1.单线程Socket的使用 /** * 单线程版本 * 问题描述:只能服务单个客户端 * 解决方案:多线程版本 */ public class Socket_V1 { pu ...