Skip to content

Latest commit

 

History

History
171 lines (151 loc) · 5.37 KB

数据流重定向与管线命令.md

File metadata and controls

171 lines (151 loc) · 5.37 KB

1.数据流重定向

  1. 标准输入(stdin): 代码0,使用<和<<表示。
  2. 标准输出(stdout): 代码1,使用>和>>表示。
  3. 标准错误输出(stderr):代码为2,使用2>和2>>表示。

> 与 >>的区别

  • 当文件不存在时,系统会自动创建,并将数据流输出到指定文件内。
  • 当文件存在时,使用>,系统会将文件先清空,然后再将数据写入。
  • 当文件存在时,使用>>,系统不清空文件数据,直接累加写入。

标准输出与标准错误输出

  • 1> :以覆盖的方法将“正确的数据”输出到指定的文件或设备上
  • 1>>:以累加的方法将“正确的数据”输出到指定的文件或设备上
  • 2> :以覆盖的方法将“错误的数据”输出到指定的文件或设备上
  • 2>>:以累加的方法将“错误的数据”输出到指定的文件或设备上
  • 如果仅存在>,默认表示的是代码1
# 将标准输出与错误输出分别存到不同的文件
cmd 1> right_output.txt 2> err_output.txt

# 将标准输出与错误输出存到同一个文件
cmd > output.txt 2>&1

# /dev/null: 相当于垃圾桶,如果错误信息不显示或存储,可以使用这个直接丢弃。
cmd 2> /dev/null

标准输入

将键盘输入到指定文件

[root@iZ8vb6ughzbdqkfd58dowoZ ~]# cat > catfile
1112^H
222
333
^C
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# cat catfile
1112
222
333

用文件替代键盘输入

cat > catfile < host.txt

指定结束字符

[root@iZ8vb6ughzbdqkfd58dowoZ ~]# cat > catfile << "end"
> 111
> 222
> 333
> 444
> end
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# cat catfile
111
222
333
444

2.命令执行的判断依据

;,不考虑指令的相关性,连续下达指令

[root@iZ8vb6ughzbdqkfd58dowoZ ~]# ls; grep "apple" host.txt
bin  caterror  catfile  cheng_blog  end  history.txt  host.txt  install_python  regular_express.txt  rootfile.txt  test  vitest
apple is my favorite food.

&&与||

  • cmd1 && cmd2: 若cmd1执行完毕且正确执行则开始执行cmd2, 若cmd1执行完毕且为错误则cmd2不执行。
  • cmd1 || cmd2: 若cmd1执行完毕且正确执行则cmd2不执行,若cmd1执行完毕且为错误则开始执行cmd2。

3.管线命令(pipe)

将前一个命令的标准输出作为下一个命令的标准输入进行处理。

cut

以行为单位,将字符串进行切割,提取

  • -d: 后面接分隔字符
  • -f: 依据-d切分后,取出第几段
  • -c: 以字符的单位取出固定字符区间
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# echo $PATH | cut -d ':' -f 1
/usr/local/sbin
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# echo $PATH | cut -d ':' -f 2
/usr/local/bin

[root@iZ8vb6ughzbdqkfd58dowoZ ~]# echo $PATH | cut -c 17-
/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# cat host.txt
192.168.1.1    host1.class.net  host1
192.168.1.2    host2.class.net  host2
192.168.1.3    host3.class.net  host3
192.168.1.4    host4.class.net  host4
192.168.1.8    host8.class.net  host8
192.168.1.5    host5.class.net  host5
192.168.1.6    host6.class.net  host6
192.168.1.7    host7.class.net  host7
192.168.1.8    host8.class.net  host8
192.168.1.8    host8.class.net  host8
192.168.1.8    host8.class.net  host8
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# cat host.txt | cut -c -11
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.8
192.168.1.5
192.168.1.6
192.168.1.7
192.168.1.8
192.168.1.8
192.168.1.8

grep

cut是将行数据中需要的数据提取出来,grep是将我们指定条件的行数据过滤出来。

  • -i:忽略大小写
  • -A:后面接数字,after,除了命中的那行,后面几行也显示出来
  • -B:后面接数字,before,除了命中的那行,前面面几行也显示出来
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# cat host.txt | grep host3
192.168.1.3    host3.class.net  host3
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# cat host.txt | grep -i HOST3
192.168.1.3    host3.class.net  host3

sort排序,uniq去重

[root@iZ8vb6ughzbdqkfd58dowoZ ~]# cat host.txt | sort
192.168.1.1    host1.class.net  host1
192.168.1.2    host2.class.net  host2
192.168.1.3    host3.class.net  host3
192.168.1.4    host4.class.net  host4
192.168.1.5    host5.class.net  host5
192.168.1.5    host5.class.net  host5
192.168.1.5    host5.class.net  host5
192.168.1.5    host5.class.net  host5
192.168.1.5    host5.class.net  host5
192.168.1.6    host6.class.net  host6
192.168.1.7    host7.class.net  host7
192.168.1.8    host8.class.net  host8
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# cat host.txt | sort | uniq
192.168.1.1    host1.class.net  host1
192.168.1.2    host2.class.net  host2
192.168.1.3    host3.class.net  host3
192.168.1.4    host4.class.net  host4
192.168.1.5    host5.class.net  host5
192.168.1.6    host6.class.net  host6
192.168.1.7    host7.class.net  host7
192.168.1.8    host8.class.net  host8

wc统计

  • -l: 统计行数
  • -w: 统计英文单字
  • -m: 统计多少字符
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# cat host.txt | wc -l
12

split

  • 按照大小切分文件 :split -b 100m 文件名
  • 按照行数切分文件 :split -l 10000 文件名