数据流重定向和管道命令, grep, tr,sort, wc, cut,split,tee,sleep(shell 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
View Code

wc指令
wc [-lwm] filename 统计功能
-l 统计行
-w 统计词
-m 统计字符

[root@localhost110 ~]# wc -l log
8 log
[root@localhost110 ~]# cat log|wc -l
8
[root@localhost110 ~]# cat log|wc -w
10
[root@localhost110 ~]# cat log -n
1 php
2 ajax
3 java
4 python
5 nginx mysql
6 GO p erlang
7 PHP5
8
[root@localhost110 ~]# cat log|wc -m
53
[root@localhost110 ~]# cat log1|wc -m
12
[root@localhost110 ~]# cat log1 -n
1 p h p
2 1 2 3
View Code
[root@bogon sh]# cat 1.txt 
a
b c
[root@bogon sh]# wc 1.txt 
2 3 6 1.txt
2行,3个单词,6个字符
[root@bogon sh]# cat -A 1.txt 
a$
b c$
[root@bogon sh]# wc -l 1.txt|cut -d ' ' -f1
2
取出行数

结尾算一个字符

tee与>

[root@bogon sh]# cat 1.txt
a
b c
[root@bogon sh]# cat 1.txt|tee 11.txt
a
b c
[root@bogon sh]# cat 1.txt>111.txt
[root@bogon sh]# cat 11.txt
a
b c
[root@bogon sh]# cat 111.txt 
a
b c

 tee重定向并输出

> 重定向 但影响正常输出了
tee到的内容 也是只有正确的内容写入

文件分割 split

[root@bogon ~]# seq 1 5
1
2
3
4
5

[root@bogon test]# for i in `seq 1 6000`;do cat /etc/passwd >>1.log;done;
[root@bogon test]# du -sh 1.log 
11M     1.log
[root@bogon test]# wc -l 1.log 
228000 1.log

 按照大小和按照行分割

1.按照行分割

split -l 10000 1.log
[root@bogon test]# ls |xargs wc -l
  228000 1.log
   10000 xaa
   10000 xab
   10000 xac
   10000 xad
   10000 xae
   10000 xaf
   10000 xag
   10000 xah
   10000 xai
   10000 xaj
   10000 xak
   10000 xal
   10000 xam
   10000 xan
   10000 xao
   10000 xap
   10000 xaq
   10000 xar
   10000 xas
   10000 xat
   10000 xau
   10000 xav
    8000 xaw

自定义命名
split -l 10000 1.log  _
[root@bogon test]# ls
1.log  _aa  _ab  _ac  _ad  _ae  _af  _ag  _ah  _ai  _aj  _ak  _al  _am  _an  _ao  _ap  _aq  _ar  _as  _at  _au  _av  _aw
[root@bogon test]# ls _*|xargs -i mv {} {}.txt
[root@bogon test]# ls
1.log    _ab.txt  _ad.txt  _af.txt  _ah.txt  _aj.txt  _al.txt  _an.txt  _ap.txt  _ar.txt  _at.txt  _av.txt
_aa.txt  _ac.txt  _ae.txt  _ag.txt  _ai.txt  _ak.txt  _am.txt  _ao.txt  _aq.txt  _as.txt  _au.txt  _aw.txt

-i 每个参数当一行
按照大小分割
[root@bogon test]# split -b 1M 1.log
[root@bogon test]# du -sh *
11M     1.log
1.0M    xaa
1.0M    xab
1.0M    xac
1.0M    xad
1.0M    xae
1.0M    xaf
1.0M    xag
1.0M    xah
1.0M    xai
1.0M    xaj
648K    xak
View Code

 字串截取 cut

cut -d ':' -f 1 ./a

cut -d ':' -f 1,3,4 ./a

cut -d ':' -f 1-3 ./a

cut -c 2-5 ./a

cut -c 1 ./a

cut -c 1,3 ./a

[root@bogon ~]# cat a
a:b:c:d:e:f
a1:b1:c1:d1:e1:f1
a2:b2:c2:d2:d2:f2
a3:b3:c3:d3:e3:f3
[root@bogon ~]# cut -d ':' -f 1 ./a
a
a1
a2
a3
[root@bogon ~]# cut -d ':' -f 1,3,4 ./a
a:c:d
a1:c1:d1
a2:c2:d2
a3:c3:d3
[root@bogon ~]# cut -d ':' -f 1-3 ./a
a:b:c
a1:b1:c1
a2:b2:c2
a3:b3:c3
[root@bogon ~]# cut -c 2-5 ./a
:b:c
1:b1
2:b2
3:b3
[root@bogon ~]# cut -c 1 ./a
a
a
a
a
[root@bogon ~]# cut -c 1,3 ./a
ab
a:
a:
a:
View Code

杀掉所有php的进程

ps -ef|grep php|grep -v grep|cut -c 9-15|xargs kill -9  

sleep 

Ctrl+z (休眠到后台执行) Ctrl+c(杀死)
jobs 查看 任务列表
fg 编号 调到前台
调到后台后执行完毕在jobs里还有
fg到前台 执行完 jobs里才没有
fg 不加编号 优先回复 jobs里是+的任务

[root@bogon sh]# sleep 100
^Z
[1]+  已停止               sleep 100
[root@bogon sh]# sleep 200
^Z
[2]+  已停止               sleep 200
[root@bogon sh]# jobs
[1]-  已停止               sleep 100
[2]+  已停止               sleep 200
[root@bogon sh]# fg 1
sleep 100

单引号,双引号,反引号

[root@bogon sh]# echo $a
modify_suffix.sh.tar.gz
[root@bogon sh]# b="echo $a"
[root@bogon sh]# echo $b
echo modify_suffix.sh.tar.gz
[root@bogon sh]# b=`echo $a`
[root@bogon sh]# echo $b
modify_suffix.sh.tar.gz
View Code

.=source 加载配置文件
. /etc/profile
source /etc/profile

还有 join/paste等

 

posted @ 2016-10-23 12:38  H&K  阅读(995)  评论(0编辑  收藏  举报