数据流重定向与管道命令

数据流重定向

数据流重定向是将某个命令执行后应该出现在屏幕上的数据传输到其他地方。

标准输入stdin:代码为0,使用<或者<<,<表示覆盖<<表示追加

标准输出stdout:代码为1,使用>或者>>,>表示覆盖输出>>表示追加输出

标准错误输出stderr:代码为2,使用2>或者2>>,>表示覆盖输出>>表示追加输出

[phh@CentOS7-1 ~]$ find /home/ -name *profile
/home/phh/.bash_profile
find: ‘/home/Alice’: 权限不够
[phh@CentOS7-1 ~]$ find /home/ -name *profile >in.txt 2>err.txt
[phh@CentOS7-1 ~]$ cat in.txt 
/home/phh/.bash_profile
[phh@CentOS7-1 ~]$ cat err.txt 
find: ‘/home/Alice’: 权限不够

上述find /home/ -name *profile的输出结果,第一行为正确执行结果的输出、即标准输出,第二行为执行出现错误的输出、即标准错误输出。

find /home/ -name *profile >in.txt 2>err.txt是将标准输出、标准错误输出分别写到当前目录的in.txt文件、err.txt文件,执行结果不输出到屏幕。

 

/dev/null垃圾黑洞设备

/dev/null可以吃掉所有导向这个设备的信息、即不保存内容,是个空文件,一般用于将所有的标准错误输出输出到这个文件。

[phh@CentOS7-1 postfix]$ find / -name .bash_profile 2>/dev/null
/etc/skel/.bash_profile
/home/phh/.bash_profile
[phh@CentOS7-1 postfix]$ cat /dev/null

 

如果要将标准输出和标准错误输出写入同一个文件,则需要使用特殊的语法,避免两者同时写出现混乱。

[phh@CentOS7-1 ~]$ find / -name .bash_profile &>all.txt
[phh@CentOS7-1 ~]$ find / -name .bash_profile >all.txt 2>&1

 

标准输入可通过键盘输入,也可通过文件输入。

[root@CentOS7-1 linux]# cat >test.txt
test1     #键盘输入
test2     #键盘输入
#按ctrl+d退出
[root@CentOS7-1 linux]# cat test.txt 
test1
test2
[root@CentOS7-1 linux]# cat >test.txt<<eof
> 1
> 2
> eof
[root@CentOS7-1 linux]# cat test.txt 
1
2

第一种方式输入结束后需要按ctrl+d退出,第二种方式<<后面的字符串表示结束输入,成对的eof(可以任意取)之间的内容为输入。

[root@CentOS7-1 linux]# cat >test.txt < ~/.bashrc   #将家目录下的.bashrc文件的内容读取并写入test.txt

 

 

管道命令

管道命令使用|,灌到后面接的第一个数据必定是命令,而且这个命令必须能够接收标准输出作为标准输入继续处理。

选取命令:cut、grep

  • cut -d '分隔字符' -f fields  -->>以指定的分隔字符分隔每行,选取指定的段
  • cut -c m-[n] -->>输出每行第m-n个字符
[root@CentOS7-1 linux]# cat /etc/passwd |cut -d ':' -f 1,6   #以:为分隔符,输出第1个、第6个字段
……
postfix:/var/spool/postfix
tcpdump:/
phh:/home/phh
Alice:/home/Alice

[root@CentOS7-1 linux]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@CentOS7-1 linux]# echo $PATH|cut -c 10-20   #输出10-20个字符
l/sbin:/usr
[root@CentOS7-1 linux]# echo $PATH|cut -c 10-    #输出第10及之后的字符
l/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin   

 

grep,处理行数据,如果行中有符合grep条件的,将该行显示出来

grep [-cinv] [--color=auto] '字符串' filename

  • -c:统计字符串出现次数
  • -i:忽略大小写
  • -n:输出行号
  • -v:反向查找,即查找不包含字符串的行
[root@CentOS7-1 linux]# grep -n home /etc/passwd
43:phh:x:1000:1000:phh:/home/phh:/bin/bash
44:Alice:x:1001:1001::/home/Alice:/bin/bash
[root@CentOS7-1 linux]# grep -c home /etc/passwd
2

 

排序命令:sort、uniq、wc

用法:sort [-fbMnrtku] [file or stdin],排序

  • -f:忽略大小写
  • -b:忽略最前面的空格
  • -M:一月份的名字来排序,例如JAN、DEC等
  • -n:使用纯数字进行排序,默认是使用字符排序
  • -r:反向排序、即降序排序,默认是升序排序
  • -t:分割符,默认使用tab
  • -k:以该区间的字段来排序
  • -u:即uniq,相同的数据仅出现一行
[root@CentOS7-1 linux]# head -5 /etc/passwd|sort
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
[root@CentOS7-1 linux]# head -5 /etc/passwd|sort -r
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
#sort默认按照字符升序排序,-r则降序排序
[root@CentOS7-1 linux]# cat /etc/passwd |sort -t : -k 3
root:x:0:0:root:/root:/bin/bash
phh:x:1000:1000:phh:/home/phh:/bin/bash
Alice:x:1001:1001::/home/Alice:/bin/bash
qemu:x:107:107:qemu user:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
……
[root@CentOS7-1 linux]# cat /etc/passwd |sort -t : -k 3 -n
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
#-t指定使用:分隔,-k指定使用分隔后的第3个字段字段排序,默认按字符排序,-n指定按数字排序

 

用法:unique [-ic],重复的数据只显示一行

  • -i:忽略大小写
  • -c:计数
[root@CentOS7-1 linux]# last|cut -d ' ' -f 1|sort|uniq

phh
reboot
root
wtmp
[root@CentOS7-1 linux]# last|cut -d ' ' -f 1|sort|uniq -c
      1 
      2 phh
      5 reboot
     16 root
      1 wtmp

 

用法:wc [-lwm]

  • -l:统计行数
  • -w:统计多少字(英文单词)
  • -m:统计多少字符
[root@CentOS7-1 linux]# cat a.txt 
hi
test file
Bye
[root@CentOS7-1 linux]# cat a.txt|wc
      3       4      17
[root@CentOS7-1 linux]# cat a.txt|wc -l
3

 

字符转换命令:tr、col、join、paste、expand

 

posted @ 2020-06-13 17:01  Forever77  阅读(230)  评论(0编辑  收藏  举报