数据流重定向和管道命令(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
View Code

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
View Code

 

&表示[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
View Code

 

 统计当前登录用户

[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
View Code
[root@centos1 ~]# cat 1.txt 
php
123php,php456
php
[root@centos1 ~]# grep -o php 1.txt 
php
php
php
php
View Code
[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
View Code

目标字符的后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
View Code

在目录下遍历查找下面的文件

[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
View Code

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
View Code

 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
View Code

 默认不区分大小写

按照文件大小写来排序

[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
View Code

设置显示方式
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
随堂练习 bash shell特性和I/O重定向及管道

Bash 重定向:命名管道和 EOF

004-用户组权限管理命令及bash配置文件管道重定向grep

linux学习输入输出重定向和管道功能cat命令more命令

IO重定向&管道&元字符

谈谈Linux下的数据流重定向和管道命令