字符界面进阶(第五章重定向和管道)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Command Input and Output
命令
简单命令 • $date 复杂命令 • $who am i who为命令,am 和 i 为参数 复合命令 • date ; who am i 每条命令按顺序执行
命令分隔符 | ;
一条命令的结束,另一条命令的开始
Pipes and Filters管道和过滤器
Find实例
$ find /etc -type
d -print
在/etc目录下查找目录文件并显示结果
$ find /home -name .bash_profile -exec more {} \;
从/home目录开始查找文件.bash_profile,并执行more命令
$ find /sbin /usr/sbin -name ”user*” -exec ls –dl {} \;
例如 当前目录下有个文件: a.c d.c n1.conf n11.conf test1.txt text11.txt 1.c a.c d.c 1.c $ ls *.c n1.conf n11.conf $ ls n*.conf test1.txt $ ls test?.* a.c d.c $ ls [abcd]* n1.conf n11.conf test1.txt $ ls [!abcd]* text11.txt 1.c $ ls [a-zA-Z]* a.c d.c n1.conf n11.conf
重定向
可以改变一个命令的标准输入或输出,使输出的结果不 显示在终端屏幕上,而是存入文件中 如在命令的末尾添加: >filename 实际执行命令这前,命令解释程序会自动打开(如果 文件不存在则自动创建)且清空文件内容(文件中已 有数据将被删除)。 命令执行完毕会自动关闭该文件。 Stderr也是显示到终端,但他和stdout是不同的流, 当重定向stdout后,stderr仍输出到终端可以通过 : 2>filename来重定向stderr流 2>errs可以把错误信息重定向到errs文件中。 &>将把错误信息及标准信息重定向到一个文件中
练习2
在/etc目录中查找符合以下标准的所有的文件名和目录名 。 选择文件名为: 以"p"开头 以"y"结尾 以"m"开头,以"d"结尾 以"m"、"g"或"m"开头 包含"o"并且"o"后面跟着(不一定紧跟着) "u" 在文件名中包含字符串"conf" 以"s"开头并且包含一个"n" 文件名正好四个字母 文件名的首字母为非小写字符 在文件名的任意地方有一个数字
Filters过滤器
上节提过,过滤器是一段程序,它从标准输入中读 入数据,然后写到标准输出中。 通常情况,过滤器输入数据后会按某种方式处理, 然后产生输出结果 一个过滤器程序通常只执行一种功能,通过管道可 以把一系列过滤器组合在一起完成复合功能
Pipes and Filters
Filters
test1.txt text11.txt
本章目标
学习使用linux流、管道、重定向.
Introduction
本章我们将涉及到
重定向标准 I/O 管道和过滤
Command Input and Output
标准的I/O
stdin 标准输入,命令的默认输入位置 stdout 标准输出,命令的默认输出位置 stderr 标准的错误输出,命令的另一个输出位置, 用于输出错误和各种诊断信息 这三种流可以想像成一个有3个元素的数组, stdin,stdout,stderr分别对应0,1,2
练习3
实践一下正则表达式。首先我们要设置好环境, 输入以下命令: $cd $cd /etc $ls -a >~/data $cd 这样,/etc目录下的所有文件的列表就会保存在 你的主目录下的data文件中。 在以下步骤中,使用下面的命令格式 $grep ‘regexp’ data ‘ 注意:下面每个表达式应匹配几行。
从/sbin和/usr/sbin目录下查找名字以“user”开头的文 件,并执行“ls -ld”命令
grep
grep
grep用来在文本文件内查找内容,指定给grep的文本模式 叫做“正则表达式” 使用格式: grep [参数] 匹配模式 filename 注意:该命令是按行查找,输出符合匹配的行 -v 输出不匹配的行 -c 输出满足匹配模式的行数 -i 匹配时忽略大小写 -n 在输出符合要求的行之前输出该行在文件中的行号 Eg: $grep „ttyp‟ /home/JOHN/book
ห้องสมุดไป่ตู้
在文件lookfor里查找以b结尾的行
$grep ’ b$’ lookfor
在文件lookfor里查找以a开头,以b结尾的行
$grep ’ ^ab$’ $grep ’ ^a*b$’ lookfor lookfor
$grep ’ ^a.*b$’
lookfor
练习1
在主目录下建立一个“backup”文件夹,并且把当前 目录改到这个新建的目录下,然后把/etc下所有以“l” 开头的文件复制到“backup”里,列出backup文件 夹下的文件名,删除其中以l开头,然后是任意数目 的字符,最后的字符不是f的文件
别名由shell提供 别名可包含shell的除特殊字符外的所有字符 别名可以创建命令的缩写 alias mv=„mv –i‟ 在命令行下运行设置别名命令只在退出系统前有效 永久的使用别名,一般都将别名命令定义.bashrc 文件里,
bash Shell
命令行扫描
当在命令行下敲入命令的时候,不受每行长度的限制,直致 我们输入回车代表一行的结束。<CR>是行结束符。 一旦shell接收到了<cr>,它就会从左到右解释各字符和命令 如果在一行中是普通字符,则直接放入命令行;如果是特殊 字符,则会先被shell解释,再放入命令行中。 Bash shell中支持TAB的智能联想补充功能。 <TAB><TAB> eg: $ ls –l $HOME/tmp/*
• -name name 查找名字为name的文件 • -user name 查找属于用户name的文件 • -type [fdlcb] 查找指定类型的文件( “d” 代表目录,“l” 代表连接) • -size [+/-]nk 查找指定大小的文件 (如 +10k意指大于 10KB) • -exec command {} \; 执行指定的文件 • -print 在标准输出中打印文件名 • -ok command {} \; 在执行命令前要求确认 • Eg: • $find /tmp -type f -exec rm {} \;
&>将把错误信息及标准信息重定向到一个文件中
Command Input and Output
Redirection
输入重定向
• 标准输入流也可以重定向到文件而不是键盘 • 从一个文件重定向标准输入允许事先输入所有要求 输入的信息,检查并更正错误,同时还可以重复利 用这些信息,对于较长的输入比较有利。 • 重定向标准输入的方法:<filename
LOGO
第五章 字符界面操作进阶
www.themegallery.com
使用命令通配符
通配符
通配符主要用于用户方便描述目录或文件。 常用的通配符 * 匹配任何字符和任何数目的字符 ? 匹配单一数目的任何字符 [ ] 匹配[ ]之内的任意一个字符 [! ] 匹配除了[! ]之外的任意一个字符,!表 示非的意思 “*” 不能匹配首字符是“.”的文件或目录 名。
Command Input and Output
Standard I/O
stdin 就是从键盘输入的字符 标准的输出会显示在终端屏幕上 标准的错误输出也会显示在终端屏幕上
stdin
0
1 stdout
command command
2
stderr
Command Input and Output
管道示例:
$ who >tmpfile 统计当前登陆系统的用户信息(一行一名用户信息) $ grep ttyp <tmpfile 刷选出文本中含有匹配字符的行 $ wc –l <tmpfile 统计行数
$who |grep ttyp |wc –l
统计出网络用户人数
Pipes and Filters
追加重定向
• 正常重定向会删除文件内容,如果我们想添加内容 到其后面。 • >>filename • 对于stderr , 2>>filename
Command Input and Output
Redirection
/dev/null • 空设备 /dev/null,作为输入时仅产生一个文件结 束符(no data),做为输出时,丢弃所有数据 • 空设备的一个典型用法就是丢弃从 grep or find等命令送来的错误信息. $grep delegate /etc/* 2>/dev/null 我们可以只在屏幕上看到有用的输出。
例: 在当前目录下存在文件lookfor,该文件内容共四行: a b dab acb 若要查找该文件中以字母a开头的行,则需命令:
$grep a*
lookfor
$grep ‘^ a’
lookfor
实用工具
正则表达式 (RE)
Linux定义了使用正则表达式的一套模式机制 指定给grep等的实用工具的文本模式叫做“正则 表达式”,由于正则表达式中有可能出现一些特殊 符号,所以必须使用引号将其括住。
$ ls -l /home/username/tmp/1
……
$ ls -l /home/username/tmp/10
find
find
find是目录树查找和执行命令。它能根据要求在目录及其子 目录中查找文件,并且可以对匹配的文件运行命令。 find directories … options … action Options 常用如下
Regular Expressions (RE)
RE 字符
• 控制字符包括
^ $ • ^$ • .* • ^[^.]\{4\}$ 包含. 只在每行的开头匹配正则表达式 只在行尾匹配正则表达式 空行 任意字符串 匹配一个含有四个字符的字符串不
在文件lookfor里查找以a开头的行
$grep ’^ a’ lookfor
实用工具
Regular Expressions (RE)
正则表达式字符 • RE 字符表达式包括
. 匹配任意一个字符 [list] 匹配列表中的一个字符 [range] 匹配指定范围内的一个字符 [^range ] 匹配指定范围之外的任意一个字符
• 与上面匹配使用的量词包括
* \{n\} \{n,\} \{n,m\} 匹配前一个字符0次或多次 区配前一个字符n次 匹配前一个字符至少n次 匹配前一个字符n次至m次
管道允许一系列进程的输入输出流连接在一起,而将这些命令 连接成为管道 过滤程序应用于管道,从而实现对管道的过滤
Pipes and Filters
Pipes管道
如果用户希望通过一个命令来处理另一个命令的输出,可 以通过重定向来完成。先重定向到一个临时文件,再把临 时文件做为另一命令的输入。 $who >tmpfile $ wc –l <tmpfile 通过管道符|,我们就可以把以上命令写为一个$who|wc –l 管道符告诉shell 将左边的命令输出做为右边命令的输入 管道是shell在命令执行前建立起来的 管道可以连接2个以上命令,通过过滤器服务程序,多级管 道在linux中是非常常见的 过滤器只是一段程序,它从自己标准输入流读入数据,然 后写到自己标准输出流中,这样就可以沿着管道过滤数据。
tee • 截获中间命令运行结果时,tee命令非常有用 • tee命令将管道的输出结果送到标准输出及指定 文件中。 $who |tee –a c |grep ttyp |wc –l 把who的输出送到c文件中,-a 代表添加模式, 而非清空模式。
The bash Shell
bash 的别名
相关文档
最新文档