码迷,mamicode.com
首页 > 系统相关 > 详细

Linux初体验之练习篇(七)

时间:2016-08-02 11:49:23      阅读:428      评论:0      收藏:0      [点我收藏+]

标签:  tr     io重定向     神奇的自动挂载   作业

Linux初体验之练习篇(七)


  • tr

  • IO重定向

  • 神奇的自动挂载


tr

主要用途

转换或删除字符

tr - translate or delete characters
tr [OPTION]... SET1 [SET2]

tr命令是一个强大的字符转换工具,可以对来自标准输入的字符进行各种转换,包括字符集对应转换、删除或都取字符补集、压缩和格式调整。格式调整包括换行、回车、加入制表符等。

常用参数

  1. -c, -C: --complemen, 取字符集的补集

  2. -d: --delete, 删除所有属于第一个字符集的字符

  3. -s: --squeeze-repeats, 压缩连续重复的字符为单独的一个字符

  4. -t: --truncate-set1, 将第一个字符集对应的字符转换为第二个字符集对应的字符

tr对字符的格式调整

\\     backslash
\a     audible BEL
\b     backspace
\f     form feed     # 换页
\n     new line
\r     return
\t     horizontal tab
\v     vertical tab

tr可用的字符集:

使用格式:tr ‘[:lower:]‘ ‘[:upper:]‘
[:alnum:]:字母和数字 
[:alpha:]:字母 
[:cntrl:]:控制(非打印)字符 
[:digit:]:数字 
[:graph:]:图形字符 
[:lower:]:小写字母 
[:print:]:可打印字符 
[:punct:]:标点符号 
[:space:]:空白字符 
[:upper:]:大写字母 
[:xdigit:]:十六进制字符

使用示例见末尾的练习

IO重定向

我们都知道,所谓程序,可简单表示为:程序=指令+数据,而在Linux系统中,数据流可分为三大类:

标准输入:standard input ——0 默认接受来自键盘的输入
标准输出:standard output ——1 默认输出到终端窗口
标准错误输出:standard error ——2 默认输出到终端窗口

所以,IO重定向就是改变IO输入输出的默认位置!而IO重定向的方式就要有 重定向符号与管道 两种方式。

另外,在Linux中,每个文件都有一个文件描述符 fd (file descriptor), 而这些文件描述符fd都会关联到一个设备上,Linux就是就是通过这些文件描述符来访问文件的!

查看文件描述符fd:

[root@centos6 ~]# cd /proc

技术分享

1. 输出重定向操作符

格式:命令  操作符   文件名

>   把STDOUT重定向到文件,文件内容会被覆盖2>  把STDERR重定向到文件
&>  把所有输出重定向到文件

>>  原有内容基础上,追加内容
>|  强制覆盖2>: 覆盖重定向错误输出数据流;2>>: 追加重定向错误输出数据流;

合并标准输出和错误输出为同一个数据流进行重定向:
&>:覆盖重定向
&>>:追加重定向
COMMAND > /path/to/file.out 2>&1 (顺序很重要)
COMMAND >> /path/to/file.out 2>>&1():多条命令输出重定向
(cal2007;cal2008) > all.txt

标准输出和错误输出各自定向至不同位置:
COMMAND > /path/to/file.out2> /path/to/error.out

注:为避免文件被误覆盖:有以下两个功能选项

# set -C: 禁止覆盖,但可追加
# set +C: 允许覆盖

2. 输入重定向操作符

格式:命令  操作符   文件名
      命令  操作符   终止词
      
<   重定向标准输入
<<终止词   多行输入重定向

3. 管道

在linux系统中,管道的主要功能是将其他程序的输出结果直接导出到另一程序,
来做输入数据,即将前一程序的输出作为后一个程序的输入,符号为"|"。
管道的语法格式为:
    COMMAND1 | COMMAND2 | COMMAND3 ...

将标准错误输出一起卷入管道,命令格式为:
    COMMAND1 |& COMMAND2 |& COMMAND3 ...

4. tee: 重定向到多个目标

tee

主要用途

重定向数据到文件且保存一个副本作为后续命令的输入

tee - read from standard input and write to standard output and files
tee [OPTION]... [FILE]...

tee命令作为重定向数据的一个得力工具,其最大的特点是能够“分流”数据,一边可以重定向数据到目标文件,一边可以将重定向的数据保存一个副本作为后续命令的标准输入。一句话,就是把数据重定向到目标文件并输出到屏幕。

常用参数

  1. -a: --append,重定向时追加而不覆盖

  2. -i: --ignore-interrupts, 忽略中断信号

使用示例

[root@centos6 ~]# ls | tee /testdir/ls.loganaconda-ks.cfg
Desktop
Documents
Downloads
install.loginstall.log.syslog
Music
Pictures
Public
Templates
Videos
[root@centos6 ~]# cat /testdir/ls.loganaconda-ks.cfg
Desktop
Documents
Downloads
install.loginstall.log.syslog
Music
Pictures
Public
Templates
Videos
[root@centos6 ~]#
[root@centos6 ~]# ls | tee out.txt | cat -n
     1	anaconda-ks.cfg     2	Desktop     3	Documents     4	Downloads     5	install.log
     6	install.log.syslog     7	Music     8	Pictures     9	Public    
     10	Templates    11	Videos
[root@centos6 ~]# cat out.txtanaconda-ks.cfg
Desktop
Documents
Downloads
install.loginstall.log.syslog
Music
Pictures
Public
Templates
Videos
[root@centos6 ~]#

神奇的自动挂载

在centos 6下有个神奇的自动挂载文件:misc

[root@centos6 ~]# rpm -i /misc/cd/Packages/SOFTNAME

虽然df命令查不出其痕迹:

[root@centos6 ~]# dfFilesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda2      100660656 4614984  90925672   5% /
tmpfs             953648     224    953424   1% /dev/shm
/dev/sda1         194241   39141    144860  22% /boot
/dev/sda3       20027260  333820  18669440   2% /testdir
/dev/sr0         3824484 3824484         0 100% /media/CentOS_6.8_Final

神奇的是可直接使用 # rpm -i /misc/cd/Packages/SOFTNAME 直接挂载。

练习一

1、使用别名命令,每日将/etc/目录下所有文件,备份到/testdir/下独立的新目录下,并要求新目录格式为backupYYYY-mm-dd ,备份过程可见。

2、先创建/testdir/rootdir目录,再复制/root所有下文件到该目录内,并要求保留原有权限。

1、
[root@centos6 testdir]# alias backup=‘cp -rv /etc/ /testdir/backup`date +%F`‘

技术分享

2、
[root@centos6 ~]# cp -r --preserv=mode /root/ /testdir/rootdir

技术分享

练习二

1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中

[root@centos6 ~]# tr ‘a-z‘ ‘A-Z‘ < /etc/issue >/tmp/issue.out

技术分享

2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中

[root@centos6 ~]# w | tr ‘a-z‘ ‘A-Z‘ > /tmp/who.out

技术分享

3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下: Hello, I am 用户名,the system version is here,pleasehelp me to check it ,thanks! 操作系统版本信息

[liansir@centos6 ~]$ echo -e "Hello, I am $(whoami), the system version is here, please help me to check it, 
thanks! \n$(lsb_release -a)" | mail -s help root
[liansir@centos6 ~]$

技术分享

4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开。

[root@centos6 ~]# ls -x 
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
[root@centos6 ~]# ls --format=horizontal
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
或:
[root@centos6 ~]# 
[root@centos6 ~]# ls -a | tr ‘\n‘ ‘ ‘

技术分享


技术分享

5、file1文件的内容为:”1 2 3 4 5 6 7 8 9 10” 计算出所有数字的总和

[root@centos6 ~]# echo "1 2 3 4 5 6 7 8 9 10" | tr ‘ ‘ + | bc
55
[root@centos6 ~]# 
或
[root@centos6 ~]# echo $[`echo "1 2 3 4 5 6 7 8 9 10" | tr ‘ ‘ + `]
55
[root@centos6 ~]#
或
[root@centos6 ~]# echo "1 2 3 4 5 6 7 8 9 10" > file2
[root@centos6 ~]# tr ‘ ‘ + < file2 | bc
55
[root@centos6 ~]# 
或
[root@centos6 ~]# cat file3
1 2 3 4 5 6 7 8 9 10
# 以下两种方法应该要优于上面的,假如一个文件中有1....10000的数的话。。。。
[root@centos6 ~]# tr " " "+" < file3 | bc   
55
[root@centos6 ~]# tr ‘ ‘ + < file3 | bc
55
[root@centos6 ~]#

6、删除Windows文本文件中的‘^M‘字符

[root@centos6 ~]# tr -d ‘\r‘ < win.txt > win2.txt

技术分享

技术分享

7、处理字符串“xt.,l 1 jr#!$mn2 c*/fe3 uz4”,只保留其中的数字和空格

[root@centos6 ~]# echo ‘xt.,l 1 jr#!$mn2 c*/fe3 uz4‘ | tr -cd ‘[:digit:] \n‘

技术分享

8、将PATH变量每个目录显示在独立的一行

[root@centos6 ~]# echo $PATH | tr ‘:‘ ‘\n‘


技术分享

9、删除指定文件的空行

[root@centos6 ~]# cat win.txt |tr -d ‘\r‘ |tr -s ‘\n‘

技术分享

10、将文件中每个单词(字母)显示在独立的一行,并无空行

[root@centos6 ~]# cat f1 | tr -cs ‘[:alpha:]‘ ‘\n‘

技术分享


止战

2016.8.1



本文出自 “止战-连Sir” 博客,请务必保留此出处http://liansir.blog.51cto.com/9372908/1833340

Linux初体验之练习篇(七)

标签:  tr     io重定向     神奇的自动挂载   作业

原文地址:http://liansir.blog.51cto.com/9372908/1833340

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!