您的位置:首页 > 运维架构 > Linux

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

2016-08-02 16:53 429 查看
描述:
标准输出(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