网站首页 > 技术教程 正文
Linux下的标准输入、输出、重定向、管道
在Linux系统中,有4个特殊的符号,<, ‘>’, ‘|’, ‘-‘,在我们处理输入和输出时存在重要但具有迷惑性的作用。
默认Linux的命令的结果都是输出到标准输出,错误信息 (比如命令未找到或文件格式识别错误等) 输出到标准错误,而标准输出和标准错误默认都会显示到屏幕上。
>表示重定向标准输出,> filename就是把标准输出存储到文件filename里面。标准错误还是会显示在屏幕上。
2 >&1 表示把标准错误重定向到标准输出。Linux终端用2表示标准错误,1表示标准输出。
- (短横线):表示标准输入,一般用于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'
1
2
3
# cat命令之前也用过,输出一段文字
# diff是比较2个文件的差异的,需要2个参数
# - (短横线)表示上一个命令的输出,传递给diff
# < 表示其后的命令的输出,也重定向给diff
ct@ehbio:~$ cat <<END | diff - <(echo "1 2 3" | tr ' ' '\n')
> 2
> 3
> 4
> END
0a1
> 1
3d3
< 4
# 如果不使用管道和重定向标准输入,程序是这么写的
# 先把第一部分存储为1个文件
ct@ehbio:~$ cat <<END >firstfile
2
3
> 4
> END
ct@ehbio:~$ less firstfile
# 再把第二部分存储为1个文件
ct@ehbio:~$ echo "1 2 3" | tr ' ' '\n' >secondfile
# 然后比较
ct@ehbio:~$ diff firstfile secondfile
0a1
> 1
3d3
< 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
- 上一篇: Linux系统编程—有名管道
- 下一篇: linux运维中特殊符号的应用与实践
猜你喜欢
- 2025-05-28 通过代码执行或命令执行写Shell
- 2025-05-28 安卓系统再曝ROM级木马“万蓝” 360手机卫士首家查杀
- 2025-05-28 常用液压元件符号
- 2025-05-28 Linux 的这几种搜索方式,你都会了吗?
- 2025-05-28 R语言——带有误差线和显著性标记的柱状图如何做?
- 2025-05-28 管道图纸上常用符号知多少?管网图常用符号大全!值得收藏备用!
- 2025-05-28 收藏 | 记住这些符号,你也能看懂消防工程图!
- 2025-05-28 「干货」Linux 中的零拷贝技术你居然还不知道?
- 2025-05-28 IT运维与网络工程师必会的30个网络抓包/调试工具
- 2025-05-28 linux 系统中正则表达式的使用
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)