博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
输入输出重定向及管道
阅读量:5960 次
发布时间:2019-06-19

本文共 2213 字,大约阅读时间需要 7 分钟。

Linux运维之路 基础篇:Linux基础命令(二) 输入输出重定向及管道

标准输入:用0表示(键盘)

标准输出:用1表示(监视器)
标准错误输出:用2表示(监视器)

IO重定向:改变标准位置

标准输出重定向:

>:覆盖重定向,目标文件原有的内容会被清除(set -C:禁止对已有文件进行覆盖重定  向) (>|:强制进行覆盖重定向)>>:追加重定向,目标文件原有的内容会被保留,新内容追加至结尾

标准错误输出重定向:

2>:标准错误输出覆盖重定向2>>:标准错误输出追加重定向

标准输出和错误输出各自定向至不同位置

命令 > 位置1 2> 位置2 (两个文件都会被创建)

合并标准输出和错误输出为同一个数据流进行重定向

命令 &> 文件或目录 或 命令 > 目录或文件 2>&1

输入重定向:符号 <

tr命令: tr [OPTION]... SET1 [SET2]

不加选项表示将字符1中的字符替换到位置与之对应的字符2中的数据
tr "a-z" "A-Z" 把小写字母转换为大写字母
加特定选项-d,将数据中的和字符1中的数据匹配到的删除
-c或——complerment:取代所有不属于第一字符集的字符
-s或--squeeze-repeats:把连续重复的字符以单独一个字符表示;
-t例如:--all例如:--all或--truncate-set1:先删除第一字符集较第二字符集多出的字符。

tr [OPTION]... SET1 [SET2] < 文件 表示从给定的文件中读取内容

<< 结束符:将结束符之前的内容合并输出
用处: cat >>/tmp/tese <<EOF 可以向指定文件中写多行内容

[root@weiying ~]# cat <<EOFmy name is rootmy version is `lsb_release -d`EOFmy name is rootmy version is Description:  CentOS Linux release 7.4.1708 (Core)

管道

把前一个命令的输出当做后一个命令的输入(最后一个命令会在当前shell进程的子进程中执行),标准错误输出默认不能通过管道转发,可利用2>&1 或 |& 实现

tee命令:从标准输入读取数据,输出至标准输出和文件中

-a:追加

例:将/etc/passwd文件前五行,转换为大写后,保存至/tmp/passwd中

head -n 5 | tr "a-z" "A-Z" | tee /tmp/passwd

练习:

  1. 将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
    [root@weiying ~]# tr [:lowwer:] [:upper:] < /etc/issue > /tmp/issue.out
  2. 将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中
    [root@weiying ~]# who | tr 'a-z' 'A-Z' > /tmp/who.out
  3. 一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:
    Hello, I am 用户名,The system version is here,please help me to check it ,thanks!操作系统版本信息
    [root@weiying ~]# mail -s "HELP" root <
    Hello:> I am `whoami`> zhe system version is `lsb_release -d`> plesas help me to check it > thanks> `cat /etc/redhat-release`> EOF
  4. 将/root下文件列表,显示成一行,并文件名之间用空格隔开
    [root@weiying ~]# ls /root | tr '\n' ' '
  5. 计算1+2+3+..+99+100的总和
    [root@weiying ~]# echo {1..100}| tr ' ' '+'|bc
  6. 删除Windows文本文件中的回车字符 ,即“\r”
    [root@weiying ~]# tr -d '\t' < win.txt
  7. 处理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字和空格
    [root@weiying ~]# echo "xt.,l 1 jr#hexdumpmn 2 c*/fe 3 uz 4" | tr -d -c '0-9 " "'
  8. 将PATH变量每个目录显示在独立的一行
    [root@weiying ~]# echo $PATH | tr ":" "\n"
  9. 将指定文件中0-9分别替代成a-j
    [root@weiying ~]# tr '0-9' 'a-j' < test
  10. 将文件/etc/centos-release中每个单词(由字母组成)显示在独立一行,并无空行
    [root@weiying ~]# cat /etc/centos-release | tr -sc '[:alpha:]' '\n'

转载于:https://blog.51cto.com/13408885/2392203

你可能感兴趣的文章
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
度量时间差
查看>>
通过jsp请求Servlet来操作HBASE
查看>>
Shell编程基础
查看>>
Shell之Sed常用用法
查看>>
3.1
查看>>
校验表单如何摆脱 if else ?
查看>>
<气场>读书笔记
查看>>
Centos下基于Hadoop安装Spark(分布式)
查看>>
3D地图的定时高亮和点击事件(基于echarts)
查看>>
mysql开启binlog
查看>>
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
并查集hdu1232
查看>>
Mysql 监视工具
查看>>
从前后端分离到GraphQL,携程如何用Node实现?\n
查看>>