标签:管道 重定向 tr
输入输出重定向、管道
1.文件描述符:
FD: 内核用来追踪在内存中已经打开的文件的属性(标识),是一个内存结构,
需要空间来存放此信息
2.标准输入输出
INPUT : 标准输入: stdin , 描述符 : 0
OUPUT: 标准输出: stdout 1
错误输出 : stderr 2
3. I/O 重定向
1). 输入重定向 : < (输入没有覆盖的概念)
<< [EOF封装]: 此处创建文件
常用于在脚本中创建文件或者生成菜单
eg: #生成菜单
cat << EOF
a: show a
b: show b
c: show c
EOF
--------> a: show a
b: show b
c: show c
#把脚本生成的信息输出生成一个文档
cat 》 /path to file.txt << EOF
a: show a
b: show b
c: show c
EOF
2).输出重定向 : > (覆盖输出) >> (追加输出,不覆盖原内容)
3). 强制覆盖重定向输出: >|
4). 错误重定向 : 2> (覆盖输出) , 2>>(追加输出)
5).全部信息重定向 :合并标准输出和错误输出为同一个数据流进行重定向
&> : (正确和错误信息都定向)
等效于 cmd > /path 2>&1
&>>:追加重定向
6).支持同时重定向标准的正确和错误输出 :
cmd > /path to 1 2> /path to 2 (分别把正确、错误信息输出到指定文件)
7). ( ):合并多个程序的STDOUT (用;分号分割)
( cal 2007 ; cal 2008 ) > all.txt
8). 多行重定向: 用<<eof ..... eof 封装
eg: cat f1 <<eof
kdkdk
kdkdk
eof (必须是独立的一行,不可以有空格等)
------》实现重定向
9).禁止使用覆盖重定向特性 : set -C
回复特性: set +C
强制覆盖重定向输出: >| (在已经设置禁止覆盖时强制覆盖重定向)
注意: 输出重定向只能用于正常的输出,无法用于错误输出
10)./dev/null bit bucket :位桶 ,用于丢弃任何输入到其中的数据
11).命令执行状态结果: 使用 $?
执行正确: 0 错误:非零值
自定义退出:
exit [n]
4. 管道: 类似输出重定向的特殊实现,可以实现多重使用
1) .管道(使用符号“ |”表示)用来连接命令
命令1 | 命令2 | 命令3 | …
将命令1的STDOUT发送给命令2的STDIN,命令2的
STDOUT发送到命令3的STDIN
STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
最后一个命令会在当前shell进程的子shell进程中执行用来
注意: 无法传递前面命令生成的变量并传递到最后的命令中,最后的命令是在子
shell中运行,已经不处于前面生成变量的作用范围
STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
2). 管道中实现即输出到显示端又输出到后续命令的实现: T 管道
命令 tee
用法: 紧跟在需要做双向输出的命令后面
eg: cat /file | tee /tmp/abcd | wc -l #显示file的内容并且放在/tmp/abcd文
件中,同时输出给wc命令 显示行数
3. tr : 转换 或者 删除
格式: tr [option] SET1 [SET2]
-c 补集 (除了匹配内容之外的内容)
-d 删除符合SET1中的字符
-s 压缩 ,将重复的字符压缩为一个字符显示
-t 当对应转换时,后面字符组位数比前面小时,只转换后面字符组对应的位数,
多出的不管
\t 水平的tab
\v 垂直的tab 可以实现阶梯状
对应转换: ‘abcd’ ‘efgh‘
a->e b->f 以此类推
‘abcd’‘efg‘
(注意 :当后面的字符位数不足时,把最后的g作为前面d的转换对象)
习惯上>后面接的是文件,| 后面是跟着命令,若是>后面跟着命令,有可能会把命令当做文件名.
练习:
1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
cat /etc/issue | tr "a-z" "A-Z" > /tmp/issue.out
2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中
whoami | 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!
操作系统版本信息
echo -e "Hello, i am `whoami` ,the system version is here,please help me to check it ,thanks! \n
`lsb_release`" > mail -s "help" liux
4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开。
ls -m /root | tr , \b
或者: ls /root | tr ‘\n‘ ‘ ‘
5、 file1文件的内容为: ”1 2 3 4 5 6 7 8 9 10” 计算出所有数字的总和
echo "1 2 34 5 6 7 8 9 10" > file1
echo $[cat file1 | tr ‘ ‘ ‘+‘]
6、删除Windows文本文件中的‘^M‘字符
cat a.txt | tr -d ‘\r‘ (windows 中,文件中换行会显示为^M)
7、处理字符串“ xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字
和空格
echo ‘xt.,l 1 jr#!$mn2 c*/fe3 uz4‘ | tr -cd ‘[:digit:] \n‘
8、将PATH变量每个目录显示在独立的一行
echo $PATH | tr : ‘\n‘
9、删除指定文件中重复的空行
cat file | tr -s ‘\n‘
10、将文件中每个单词(字母)显示在独立的一行,并无空行
tr -cs ‘[:alpha:]‘ ‘\n‘
标签:管道 重定向 tr
原文地址:http://195175108.blog.51cto.com/10167819/1833194