Linux 管道 标准输出,Linux学习 - 管道、标准输入输出

Linux学习 - 管道、标准输入输出

Linux下的标准输入、输出、重定向、管道

在Linux系统中,有4个特殊的符号,’, ‘|’, ‘-‘,在我们处理输入和输出时存在重要但具有迷惑性的作用。

默认Linux的命令的结果都是输出到标准输出,错误信息 (比如命令未找到或文件格式识别错误等) 输出到标准错误,而标准输出和标准错误默认都会显示到屏幕上。

>表示重定向标准输出,> filename就是把标准输出存储到文件filename里面。标准错误还是会显示在屏幕上。

2 >&1 表示把标准错误重定向到标准输出。Linux终端用2表示标准错误,1表示标准输出。

- (短横线):表示标准输入,一般用于1个程序需要多个输入的时候。

|管道符,表示把前一个命令的输出作为后一个命令的输入,前面也有一些展示例子。用于数据在不同的命令之间传输,用途是减少硬盘存取损耗。

下面我们通过一个程序stdout_error.sh来解释上面的文字,内容如下

#!/bin/bash

echo "I am std output"

# 下面是随便写的一个理论上不存在的命令, 理论上会报错的。

unexisted_command

运行这个脚本

# 标准输出和标准错误默认都会显示到屏幕上

ct@ehbio:~$ bash stdout_error.sh

I am std output

stdout_error.sh: line 5: unexisted_command: command not found

# >把结果输入到了文件;标准错误还显示在屏幕上

ct@ehbio:~$ bash stdout_error.sh >stdout_error.stdout

stdout_error.sh: line 5: unexisted_command: command not found

ct@ehbio:~$ cat stdout_error.stdout

I am std output

# >把结果输入到了文件; 2>把标准错误输入到了另一个文件

ct@ehbio:~$ bash stdout_error.sh >stdout_error.stdout 2>stdout_error.stderr

ct@ehbio:~$ cat stdout_error.stderr

stdout_error.sh: line 5: unexisted_command: command not found

# 标准输出和标准错误写入同一个文件

ct@ehbio:~$ bash stdout_error.sh >stdout_error.stdout 2>&1

ct@ehbio:~$ cat stdout_error.stdout

I am std output

stdout_error.sh: line 5: unexisted_command: command not found

下面看管道符和标准输入的使用。

# 管道符的使用# 第一个命令的输出作为第二个的输入# 前面的例子中也有使用# tr: 是用于替换字符的,把空格替换为换行,文字就从一行变为了一列ct@ehbio:~$ echo "1 2 3" | tr ' ' '\n'123# cat命令之前也用过,输出一段文字# diff是比较2个文件的差异的,需要2个参数# - (短横线)表示上一个命令的输出,传递给diff# < 表示其后的命令的输出,也重定向给diffct@ehbio:~$ cat < 2> 3> 4> END0a1> 13d3< 4# 如果不使用管道和重定向标准输入,程序是这么写的# 先把第一部分存储为1个文件ct@ehbio:~$ cat <firstfile23> 4> ENDct@ehbio:~$ less firstfile # 再把第二部分存储为1个文件ct@ehbio:~$ echo "1 2 3" | tr ' ' '\n' >secondfile# 然后比较ct@ehbio:~$ diff firstfile secondfile 0a1> 13d3< 4

管道符的更多应用

ct@ehbio:~$ echo "actg aaaaa cccccg" | tr ' ' '\n' | wc -l

3

# sed =:先输出行号,再输出每行的内容

ct@ehbio:~$ echo "a b c" | tr ' ' '\n' | sed =

1

a

2

b

3

c

# 后面这个命令不太好解释

# sed = 同时输出行号

# N: 表示读入下一行;sed命令每次只读一行,加上N之后就是缓存了第2行,所有的操作都针对第一行;

# s: 替换;把换行符替换为\t

ct@ehbio:~$ echo "a b c" | tr ' ' '\n' | sed = | sed 'N;s/\n/\t/'

1 a

2 b

3 c

# 后面这个命令不太好解释

# sed = 同时输出行号

# N: 表示读入下一行;sed命令每次只读一行,加上N之后就是缓存了第2行,所有的操作都针对第一行;

# s: 替换;把读取的奇数行行首加一个'>'(偶数行相当于被隐藏了)

ct@ehbio:~$ echo "a b c" | tr ' ' '\n' | sed = | sed 'N;s/^/>/'

>1

a

>2

b

>3

c

# 把多条序列转成FATSA格式

# sed = 同时输出行号

# N: 表示读入下一行;sed命令每次只读一行,加上N之后就是缓存了第2行,所有的操作都针对第一行;

# s: 替换;把读取的奇数行行首加一个'>'(偶数行相当于被隐藏了)

# 于是FASTA格式序列就出来了

ct@ehbio:~$ echo "actg aaaaa cccccg" | tr ' ' '\n' | sed = | sed 'N;s/^/>/'

>1

actg

>2

aaaaa

>3

cccccg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值