标签:重定向 tr命令 linux基础知识之管道
描述:
标准输出(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
结束语:
本篇内容是本人上课内容的总结和整理,若有错误或不足,请各位路过的达人多多指教。
标签:重定向 tr命令 linux基础知识之管道
原文地址:http://suifengsky.blog.51cto.com/11393684/1833610