数据流重定向和管道命令(bash学习02)
Posted 梦想远航
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据流重定向和管道命令(bash学习02)相关的知识,希望对你有一定的参考价值。
主要内容
1.标准输入输出和错误
2.管道命令和 grep, tr,sort, wc, cut,split,tee,sleep
标准输入输出和错误
标准输入(stdin) 是指令数据的输入,代码为0,使用<或者<<,默认是键盘
标准输出(stdout)是指令执行成功返回的结果,代码为1,使用>或者>>,默认由屏幕显示
标准错误输出(stderr)是指令执行失败返回的错误信息,代码为2,使用2>或者2>>,默认是屏幕
< 指定输入的数据媒介来源
1> 将正确的内容 覆盖输出到指定的媒介
1>> 将正确的内容 追加到指定的媒介
2> 将错误信息覆盖输出到指定媒介
2>> 将错误信息追加输出到指定媒介
默认只能保存正确的
同时分类导出
[admin@localhost110 ~]$ rm -rf success fail result [admin@localhost110 ~]$ find /root a.txt 1>success 2>fail [admin@localhost110 ~]$ cat success /root a.txt [admin@localhost110 ~]$ cat fail find: “/root”: 权限不够 正确错误的均导入文件 [admin@localhost110 ~]$ find /root a.txt >result 2>&1
2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到a.txt中,最终结果就是标准输出和错误都被重定向到a.txt中
或者写成 find /root a.txt 1>>a.txt 2>a.txt
先写错误,后写正确的 所以 写正确的时候要用追加
[admin@localhost110 ~]$ cat result /root find: “/root”: 权限不够 a.txt [admin@localhost110 ~]$ find /root a.txt >result1 2>&1 [admin@localhost110 ~]$ find /root a.txt >result find: “/root”: 权限不够 [admin@localhost110 ~]$ find /root a.txt &>result2
&表示[012]
grep [a-z] -n <a.txt
替换
小写字母替换成大写字母
tr \'[a-z]\' \'[A-Z]\'<a.txt >a1.txt
ls -al|tr \'a-z\' \'A-Z\' 或者 ls -al|tr \'[a-z]\' \'[A-Z]\'
管道命令使用
命令通过管道符号|连接
能够接收标准输入(stdin),如tail/more/grep等
能够接收来自于前一个指令的数据成为stdin进行处理 只能处理正确的输出,不能处理错误的输出
ls -8|grep ls
处理不了
grep [-cinv] \'key\' filename 支持正则
-c : 计算出现要查找字符的行数(是统计几行含有匹配的字符,并不是出现的次数)
-o :找出所有的要查找字符的匹配,一个1行
-i: 忽略大小写进行查找
-n: 输出行号
-v: 显示没有该字符的行 取反
-s:不显示不存在或无匹配文本的错误信息 忽略错误信息
-r: 递归遍历查找(比如在目录下递归查找文件内容)
-q:静默模式,不输出
[root@localhost110 ~]# cat log -n 1 php 2 ajax 3 java 4 python 5 nginx mysql 6 GO 7 PHP5 8 [root@localhost110 ~]# grep \'php\' log php [root@localhost110 ~]# grep -n \'php\' log 1:php [root@localhost110 ~]# grep -ni \'php\' log 1:php 7:PHP5 [root@localhost110 ~]# grep -ci \'php\' log 2 [root@localhost110 ~]# grep -inv \'php\' log 2:ajax 3:java 4:python 5:nginx mysql 6:GO 8: [root@localhost110 ~]# grep -n [a-z] log 1:php 2:ajax 3:java 4:python 5:nginx mysql [root@localhost110 ~]# grep -nc [a-z] log 5 grep -n --color [a-z] log
统计当前登录用户
[root@localhost110 ~]# w 01:53:08 up 18:15, 1 user, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.1.101 01:19 0.00s 0.24s 0.13s w [root@localhost110 ~]# w|grep -n root 3:root pts/0 192.168.1.101 01:19 0.00s 0.11s 0.00s w [root@localhost110 ~]# w|grep -nc root 1 不是root的 [root@localhost110 ~]# w|grep -v root 01:54:20 up 18:16, 1 user, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
[root@centos1 ~]# cat 1.txt php 123php,php456 php [root@centos1 ~]# grep -o php 1.txt php php php php
[root@bogon sh]# echo 11|grep [0-9] 11 [root@bogon sh]# echo 11|grep [0-9] -q [root@bogon sh]# echo $? 0 [root@bogon sh]# echo abc|grep [0-9] [root@bogon sh]# echo $? 1
目标字符的后n行
-A2 表示 目标字符的后2行也显示出来 A表示after
-B2 表示 目标字符的前2行也显示出来 B表示before
-C2 上下2行
[root@bogon ~]# grep -A2 -n \'root\' p.txt 1:root:x:0:0:root:/root:/bin/bash 2-bin:x:1:1:bin:/bin:/sbin/nologin 3-daemon:x:2:2:daemon:/sbin:/sbin/nologin -- 10:operator:x:11:0:operator:/root:/sbin/nologin 11-games:x:12:100:games:/usr/games:/sbin/nologin 12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@bogon ~]# grep -B2 -n \'root\' p.txt 1:root:x:0:0:root:/root:/bin/bash -- 8-halt:x:7:0:halt:/sbin:/sbin/halt 9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10:operator:x:11:0:operator:/root:/sbin/nologin [root@bogon ~]# grep -C2 -n \'root\' p.txt 1:root:x:0:0:root:/root:/bin/bash 2-bin:x:1:1:bin:/bin:/sbin/nologin 3-daemon:x:2:2:daemon:/sbin:/sbin/nologin -- 8-halt:x:7:0:halt:/sbin:/sbin/halt 9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10:operator:x:11:0:operator:/root:/sbin/nologin 11-games:x:12:100:games:/usr/games:/sbin/nologin 12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
在目录下遍历查找下面的文件
[root@bogon ~]# grep -r \'php\' ./f ./f/t/1.txt:php5 ./f/t/1.txt:4php ./f/t/1.txt:js123php ./f/t/2.txt:php5 ./f/t/2.txt:4php ./f/t/2.txt:js123php ./f/a.php._mod:php ./f/a.php._mod:php2 ./f/a.php._mod:php4
grep中正则符号
* *前 任意数量个字符
. 匹配单个任意字符(字母,数字,下划线,空格)
? ?号之前的字符 0个或者1个 匹配时得 grep -E 或者 egrep
+ +1个或者多个 匹配时得 grep -E 或者 egrep
.* 贪婪匹配任意个数量的任意字符
abc|ef 匹配 abc或者ef
?,+都得egrep 或者grep -E
[root@bogon ~]# cat 1.txt root rt rut roooooot [root@bogon ~]# grep \'ro*t\' 1.txt root rt roooooot 匹配指定个数的 比如匹配含有2个ou的 [root@bogon ~]# cat 1.txt rouououoooot rt rout rouout rouut [root@bogon ~]# grep \'r\\(ou\\)\\{2\\}\' 1.txt rouououoooot rouout [root@bogon ~]# cat 1.txt rt rot root ro t [root@bogon ~]# grep \'ro?t\' 1.txt [root@bogon ~]# grep -E \'ro?t\' 1.txt rt rot [root@bogon ~]# egrep \'ro?t\' 1.txt rt rot [root@bogon ~]# grep \'root|mysql\' p.txt [root@bogon ~]# grep \'root\\|mysql\' p.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:#operator:/root:/sbin/nologin mysql:x:994:1003::/usr/local/mysql-5.6:/bin/bash [root@bogon ~]# grep -E \'mysql|root\' p.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:#operator:/root:/sbin/nologin mysql:x:994:1003::/usr/local/mysql-5.6:/bin/bash [root@bogon ~]# egrep -E \'mysql|root\' p.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:#operator:/root:/sbin/nologin mysql:x:994:1003::/usr/local/mysql-5.6:/bin/bash
sort指令
sort [-fbknrtu] filename
-f 忽略大小写
-b 忽略最前面的空格
-M 以月份英文字母排序
-n 使用数字排序
-r 逆向排序
-t 分隔符标识 默认是tab
-k 以第几列来排序
-u 删除重复的即使中间有间隔 注意与uniq区别
[root@localhost110 ~]# ls ab anaconda-ks.cfg a.php b.php composer.phar install.log install.log.syslog log mysql_listen.sh 公共的 模板 视频 图片 文档 下载 音乐 桌面 [root@localhost110 ~]# ls|sort ab anaconda-ks.cfg a.php b.php composer.phar install.log install.log.syslog log mysql_listen.sh [root@localhost110 ~]# ls|sort -r mysql_listen.sh log install.log.syslog install.log composer.phar b.php a.php anaconda-ks.cfg ab [root@localhost110 ~]# ls|sort ab anaconda-ks.cfg a.php A.php b.php B.php composer.phar D.php install.log install.log.syslog log mysql_listen.sh [root@bogon sh]# cat a.txt 11 10 0 8 7 2 1 4 5 3 6 9 2 2 3 3 [root@bogon sh]# cat a.txt |sort 0 1 10 11 2 2 2 3 3 3 4 5 6 7 8 9 [root@bogon sh]# cat a.txt |sort -n 0 1 2 2 2 3 3 3 4 5 6 7 8 9 10 11 [root@bogon sh]# cat a.txt |sort -nr 11 10 9 8 7 6 5 4 3 3 3 2 2 2 1 0 [root@bogon sh]# cat a.txt |sort -nr|uniq 11 10 9 8 7 6 5 4 3 2 1 0 [root@bogon sh]# cat a.txt |sort -nr|uniq -c 1 11 1 10 1 9 1 8 1 7 1 6 1 5 1 4 3 3 3 2 1 1 1 0
默认不区分大小写
按照文件大小写来排序
[root@localhost110 ~]# ls -l|sort -t \' \' -k 5 -n 总用量 1740 -rw-r--r--. 1 root root 6 10月 16 02:17 1 -rw-r--r--. 1 root root 6 10月 16 02:17 B.php -rw-r--r--. 1 root root 8 10月 16 01:59 a.php -rw-r--r--. 1 root root 11 10月 16 02:06 A.php -rw-r--r--. 1 root root 42 10月 16 01:42 log -rw-r--r--. 1 root root 140 10月 16 02:02 ab -rw-r--r--. 1 root root 143 10月 16 01:59 b.php -rwxrwxrwx. 1 root root 272 1月 27 2016 mysql_listen.sh -rw-r--r--. 1 root root 1112 10月 16 02:17 D.php -rw-------. 1 root root 1416 1月 13 2016 anaconda-ks.cfg drwxr-xr-x. 2 root root 4096 1月 13 2016 公共的 drwxr-xr-x. 2 root root 4096 1月 13 2016 模板 drwxr-xr-x. 2 root root 4096 1月 13 2016 视频 drwxr-xr-x. 2 root root 4096 1月 13 2016 图片 drwxr-xr-x. 2 root root 4096 1月 13 2016 文档 drwxr-xr-x. 2 root root 4096 1月 13 2016 下载 drwxr-xr-x. 2 root root 4096 1月 13 2016 音乐 drwxr-xr-x. 2 root root 4096 1月 13 2016 桌面 -rw-r--r--. 1 root root 10033 1月 13 2016 install.log.syslog -rw-r--r--. 1 root root 46328 1月 13 2016 install.log -rwxr-xr-x. 1 root root 1640731 6月 7 09:40 composer.phar
设置显示方式
export TIME_STYLE=\'+%Y-%m-%d %H:%M:%S\'
[root@localhost110 ~]# ls -l|sort -k 6 总用量 1740 -rw-r--r--. 1 root root 10033 2016-01-13 17:42:57 install.log.syslog -rw-r--r--. 1 root root 46328 2016-01-13 17:48:20 install.log -rw-------. 1 root root 1416 2016-01-13 17:48:28 anaconda-ks.cfg drwxr-xr-x. 2 root root 4096 2016-01-13 17:52:58 公共的 drwxr-xr-x. 2 root root 4096 2016-01-13 17:52:58 模板 drwxr-xr-x. 2 root root 4096 2016-01-13 17:52:58 视频 drwxr-xr-x. 2 root root 4096 2016-01-13 17:52:58 图片 drwxr-xr-x. 2 root root 4096 2016-01-13 17:52:58 文档 drwxr-xr-x. 2 root root 4096 2016-01-13 17:52:58 下载 drwxr-xr-x. 2 root root 4096 2016-01-13 17:52:58 音乐 drwxr-xr-x. 2 root root 4096 2016-01-13 17:52:58 桌面 -rwxrwxrwx. 1 root root 272 2016-01-27 05:54:08 mysql_listen.sh -rwxr-xr-x. 1 root root 1640731 2016-06-07 09:40:58 composer.phar -rw-r--r--. 1 root root 42 2016-10-16 01:42:05 log -rw-r--r--. 1 root root 8 2016-10-16 01:59:03 a.php -rw-r--r--. 1 root root 143 2016-10-16 01:59:45 b.php -rw-r--r--. 1 root root 140 2016-10-16 02:02:19 ab -rw-r--r--. 1 root root 11 2016-10-16 02:06:07 A.php -rw-r--r--. 1 root root 6 2016-10-16 02:17:17 1 -rw-r--r--. 1 root root 6 2016-10-16 02:17:21 B.php -rw-r--r--. 1 root root 1112 2016-10-16 02:17:30 D.php
004-用户组权限管理命令及bash配置文件管道重定向grep