Linux 重定向、管道和 tr命令总给

描述:

       标准输出(standard output)指的是命令执行所回传的正确的信息

   标准输出(standard error output)指的是命令执行失败后所回传的错误信息

    Linux 给程序提供三种I/O 设备

    标准输入(STDIN )- 0 默认接受来自键盘的输入,使用< 或者 <<

    标准输出(STDOUT )- 1 默认输出到终端窗口,默认是屏幕,使用> 或者 >>

    标准错误输出(STDERR )- 2 默认输出到终端窗口,默认是屏幕,使用2> 或者 2>>

              通过I/O 重定向可改变默认位置,可将正确的或者错误的信息输出到屏幕或者文件里,输入的信息可从键盘或者文件中读取

   程序是由指令+数据组成的,STDOUT 和STDERR 可以被重定向到文件

说明:         

          格式为: 命令   操作符号   文件名

          1>   以覆盖的方式将正确的数据输出到指定的文件或者设备上

          1>>    以追加的方式将正确的数据输出到指定的文件或者设备上

           2>      以覆盖的方式将错误的数据输出到指定的文件或者设备上

           2>>     以追加的方式将错误的数据输出到指定的文件或者设备上

    &>  把所有输出重定向到文件

    >> 在原有内容的基础上,追加内容  

        可通过# set -C:  禁止将内容覆盖 已有文件, 但可追加,强制覆盖:>|

        # set +C:  允许覆盖

[root@localhost ~]# echo "a" > file1
[root@localhost ~]# cat file1
a
[root@localhost ~]# set -C
[root@localhost ~]# echo "123" >file1
bash: file1: cannot overwrite existing file
[root@localhost ~]# echo "123" >| file1
[root@localhost ~]# cat file1
123
[ping@localhost ~]$ find /home -name .bashrc > list_right 2> list_error
[ping@localhost ~]$ cat list_right 
/home/ping/.bashrc
[ping@localhost ~]$ cat list_error
find: `/home/user1': Permission denied


          标准输出和错误输出各自定向至不同位置:

          COMMAND > /path/to/file.out 2> /path/to/error.out

           合并标准输出和错误输出为同一个数据流进行重定向:

          &> :覆盖重定向

          &>> :追加重定向

         COMMAND > /path/to/file.out 2> &1  (顺序很重要)

         COMMAND >> /path/to/file.out 2>> &1

         find /etc -name passwd 2> /dev/null

        ():合并多个程序的STDOUT

         ( cal 2010 ; cal 2011 ) > all.txt

[ping@localhost ~]$ find /home -name .bashrc 2&>1 list
[ping@localhost ~]$ find /home -name .bashrc &> list
[ping@localhost ~]$ cat list
find: `/home/user1': Permission denied
/home/ping/.bashrc

标准输入(standard input): < 与 <<

将原来要由键盘输入的数据改由文件内容来替代

使用< 来重定向标准输入

使用“<< 终止词”命令从键盘把多行重导向给STDIN

[root@localhost ~]# cat > catfile
testing
cat file test
[root@localhost ~]# cat > catfile < ~/.bashrc
[root@localhost ~]# ll catfile ~/.bashrc
-rw-r--r-- 1 root gentoo 235 Aug 11 03:22 catfile
-rw-r--r-- 1 root root   235 Jul 27  2016 /root/.bashr
[root@localhost ~]# cat > catfile << "eof"
> this is a test
> ok now stop
> eof
[root@localhost ~]# cat catfile
this is a test
ok now stop

管道命令:

 使用符号 “|” 表示,用来连接命令

    格式:命令1 | 命令2 | 命令3 | ...

     管道命令仅会处理standard output, 对于standard error output 会予以忽略

     管道命令必须要能够接受来自前一个命令的数据成为standard input 继续处理才行

     stderr 默认不能通过管道转发,可利用 2>&1  或 |& 实现

[root@localhost ~]# ls -al /etc | less
[root@localhost ~]# lss -al /etc | less


tr命令:

      转换和删除字符

      格式:tr [OPTION]... SET1 [SET2]

                -c 或——complerment :取字符集的补集

               -d 或——delete :删除所有属于第一字符集 的字符

     -s 或—squeeze-repeats :把连续重复的字符以单独一个字符表示

     -t 或--truncate-set1 :将第一个字符集对应字符转化为第二字符集对应的字符

示例:

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

[root@localhost tmp]# cat /etc/issue | tr 'a-z' 'A-Z' > /tmp/issue.out
[root@localhost tmp]# cat /tmp/issue.out 
CENTOS RELEASE 6.8 (FINAL)
KERNEL \R ON AN \M
TTY IS \L
HOSTNAME IS \N
TIME IS \T

2,PATH 变量每个目录显示在独立的一行

[root@localhost ~]# echo $PATH | tr -s '\n'
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin


结束语:

      本篇内容是本人上课内容的总结和整理,若有错误或不足,请各位路过的达人多多指教。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章