第一周 IO重定向管道以及 tr tee命令

第一部分 重定向

第二部分 tr

第三部分 管道

第四部分 tee

 

一 重定向     

1.1说明

Linux系统中一切皆文件,打开一文件,Linux会自动分配一个称为文件描述符的软连接,指向正在打开的文件。

    文件描述符是一个非负整数(通常是小整数),是内核为了高效管理已被打开的文件所创建的索引。

     所有执行I/O操作的系统调用都需要文件描述符

数据流向有 

    输入流:通常键盘输入

   1.2 输出流:

               标准输出流:正确的输出到当前的终端屏幕

               错误输出流:标准错误输出到显示

当一个程序启动,会自动打开三个I/O设备文件:

   STDIN:标准输入文件,得到文件描述符为 0 

   STDOUT:标准输出文件,得到文件描述符为 1

    STDERR:标准错误输出文件,得到文件描述符为 2

此时, 再次打开一个新的文件,那么它的文件描述符为3.

文件描述符是由 linux内核的默认值觉得的。

I/O重定向是: 把数据流流传到非默认设备的其他地方。

输入输出重定向

 

1.3语法:

Command >file 输出重定向到文件

Command <file 输入重定向到file

Command >>file 输出追加的方式重定向到file

n>file 将文件描述符为n的文件重定向file

n>>file将文件描述符为n的文件以追加的方式重定向到file

n>&m 将输出文件m和n合并

n<&m 将输入文件m和n合并

2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null2>>&1

1.4多行标准重定向

 Command >>EOF

  Line1

  Line2

  EOF

一般在脚本中使用。

 

1.5备注:

Bash中可以设置禁用覆盖重定向

set -C 禁止将内容覆盖已有文件,但可以追加。这个设置也可以使用强制覆盖的表达方式执行覆盖: >|file

set +C 表示允许覆盖

 

二 利用tr命令实现字符转换

2.1 tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符

2.2语法

tr(选项)(参数)

2.3选项

-c或——complerment:取代所有不属于第一字符集的字符;
-d或——delete:删除所有属于第一字符集的字符;
-s或--squeeze-repeats:把连续重复的字符以单独一个字符表示;
-t或--truncate-set1:先删除第一字符集较第二字符集多出的字符。

参数

  • 字符集1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数字符集2”指定转换的目标字符集。但执行删除操作时,不需要参数字符集2”
  • 字符集2:指定要转换成的目标字符集。

2.4实例

1 将输入字符由大写转换为小写:

echo "hello world" | tr 'a-z' 'A-Z'

2 使用tr删除字符:

#echo "hello world 456" | tr -d '0-9'

hello  world

3 将制表符转换为空格:

#cat text | tr '\t' ' '

4 字符集补集,从输入文本中将不在补集中的所有字符删除:

#echo aa.,;s 1 b#^bb 2 c*/cc 3 ddd 4 | tr -d -c '0-9 \n'
 1  2  3  4

此例中,补集中包含了数字0~9、空格和换行符\n,所以没有被删除,其他字符全部被删除了。

5. tr压缩字符,可以压缩输入中重复的字符:

#echo "thissss is      a text linnnnnnne." | tr -s ' sn'
this is a text line.

6. 巧妙使用tr做数字相加操作

#echo 1 2 3 4 5 6 7 8 9 | xargs -n1 | echo $[ $(tr '\n' '+') 0 ]

7. 删除Windows文件造成'^M'字符:

#cat file | tr -s "\r" "\n" > new_file

#cat file | tr -d "\r" > new_file

8. 将/etc/passwd文件的前6行的信息转换为大写字符到输出

#head -n 6 /etc/passwd |tr ‘a-z’’a-Z’

9使用glob

tr '[:lower:]' '[:upper:]'

 

10 生成固定长度的随机密码

head /dev/urandom | tr -dc A-Za-z0-9 | head -c 20

 

三 管道 “|”

一个连接程序,实现将前一个命令的输出直接定向后一个程序当作输入的数据流

管道使用格式:

 Command1|Command2|Command3…

使用管道操作符“|”可以把一个命令的标准输出传送到另一个命令的标准输入中,连续的|意味着命令的输出为下一个命令的输入

例子:

          获取/etc/passwd的第一行数据

         # cat /etc/passwd|cut -d: -f1

 

四 tee命令

      可以接收标准输入并重定向多个目标,进行管道处理。

     格式:tee [option] [file]
     option:
   -a: 数据添加到文件中,不覆盖原文件。

例子:
    输出test到(以添加不覆盖的方式)文件test1.txt和test2.txt,同时输出到标准输出中

    #echo 'test' | tee -a test1.txt test2.txt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值