乐虎游戏|乐虎国际登录|欢迎你

第五章 linux重定向和管道

日期:2019-12-16编辑作者:计算机资讯

linux关于重定向的知识讲解,linux重定向讲解

1.输出重定向的两种方式:

> 覆盖原文件内容

>> 追加写,不覆盖原文件内容

2.两种重定向

错误命令重定向 2> 或 2>> (错误命令重定向中 >或和>> 左右两边不能有空格)

正确命令重定向 > 或 >>

常用:

错误密令 + 正确命令 保存到同一个文件:

方法一: 命令 >> 文件 2>&1 (覆盖写时少个>)

方法二: 命令 &>> 文件 (覆盖写时少个>)

eg: ls /home/heyu >> access.log 2>&1

ls &> /home/heyu

错误命令 和 正确命令 保存到不同文件:

命令 >> 保存正确结果文件 2>> 保存错误结果文件

eg: cd fjladjflaj >> access.log 2>>error.log

Linux Shell 环境中的输入输出重定向,用符号<和>来表示。0、1和2分别表示标准输入、标准输出和标准错误。

1.重定向标准输出到文件:cat foo > foo.txt2.重定向标准错误到文件cat foo 2> foo.txt3.重定向标准输出到标准错误cat foo 1>&24.重定向标准错误到标准输出cat foo 2>&15.重定向标准输出,标准错误到同一个文件cat foo > foo.txt 2>&1或cat foo&> foo.txt这里第个顺序很重要,先把标准输出重定向到文件,再把标准错误输出到标准输出,因为标准输出已经重定向到文件,所以标准错误与重定向到文件。

ls 2>1 会输出一个空的文件1;

ls xxx 2>1 没有xxx这个文件的错误输出到文件1中;

ls xxx 2>&1 不会生成1这个文件了,不过错误跑到标准输出了;

ls xxx >out.txt 2>&1, 实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。

1.输出重定向的两种方式: 覆盖原文件内容 追加写,不覆盖原文件内容 2.两种重定向 错误命令重...

重定向和管道

标准输入和输出:

程序:指令+数据

读入数据:Input

输出数据:Output

打开的文件都有一个fd: file descriptor (文件描述符)

Linux给程序提供三种I/O设备

  • 标准输入(STDIN)-0默认接受来自键盘的输入
  • 标准输出(STDOUT)-1默认输出到终端窗口
  • 标准错误(STDERR)-2默认输出到终端窗口

I/O重定向:改变默认位置

[root@localhost /app]#ls >/dev/pts/7

本终端窗口不进行输出,将结果输出到别的终端窗口。

把输出和错误重新定向到文件:

STDOUT和STDERR可以被重定向到文件

命令  操作符号  文件名

支持的操作符号包括:

> 把STDOUT重定向到文件

2>把STDERR重定向到文件

&>把所有输出重定向到文件

> 文件内容会被覆盖

set –C 禁止将内容覆盖已有文件,但可追加

>| file 强制覆盖

set +C 允许覆盖

>> 原有内容基础上,追加内容,原文件存在不刷新时间戳。

2>覆盖重定向错误输出数据流

2>>追加重定向错误输出数据流

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

COMMAND > /path/to/file.out2> /path/to/error.out

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

&>覆盖重定向

&>> 追加重定向

COMMAND > /path/to/file.out2>&1 (顺序很重要)

COMMAND >> /path/to/file.out2>&1

():合并多个程序的STDOUT

(cal2007;cal2008)> all.txt

[root@localhost /app]#(hostname;whoami;ls)>a.txt

[root@localhost /app]#cat a.txt

localhost.localdomain

root

a

aaaa

f

lost+found

加上( )把三个命令的结果全部添加到文件a.txt中。如果不加( )由于优先级问题就会先执行>即a.txt中的内容为ls执行的结果。

[root@localhost /app]#(error;hostname)>aaa.log   2>&1

把错误的重定向到标准输出,而标准输出是放到aaa.log文件中的。

[root@localhost /app]#(error;hostname)  2>&1  >a

-bash: error: command not found

2>&1放前面和后面是完全不一样的结果,前一条命令直接变成对的输出到屏幕,后一条命令是对的直接输出到文件。

[root@localhost /app]#((error;hostname) 2>&1) >a

[root@localhost /app]#cat a

-bash: error: command not found

localhost.localdomain

这样加上( )经过转换就可以了。

[root@localhost /app]#(error;hostname)&>aaa.log   

等价于上一条执行的命令。

[root@localhost /app]#ls >/dev/null

/dev/null是黑洞设备,不需要输出到窗口的信息可以重定向到这里。

[root@localhost /app]#(echo error 1>&2) > /dev/null

error

把对的转化为错的,显示的结果不能标准输出到/dev/null中

tr命令:

tr转换和删除字符

tr[OPTION]... SET1 [SET2]

选项:

-c–C --complement:取字符集的补集

-d--delete:删除所有属于第一字符集的字符

-s--squeeze-repeats:把连续重复的字符以单独一个字符表示

-t--truncate-set1:将第一个字符集对应字符转化为第二字符集

对应的字符

[:alnum:]:字母和数字   [:alpha:]:字母[:cntrl:]:控制(非打印)字符[:digit:]:数字         [:graph:]:图形字符     [:lower:]:小写字母[:print:]:可打印字符   [:punct:]:标点符号     [:space:]:空白字符   [:upper:]:大写字母     [:xdigit:]:十六进制字符

从文件中导入STDIN:

使用<来重定向标准输入

某些命令能够接受从文件中导入的STDIN

tr‘a-z’‘A-Z’</etc/issue

该命令会把/etc/issue中的小写字符都转换成大写字符

tr –d abc < /etc/fstab 删除fstab文件中的所有abc中任意字符

cat > file

sunan

sunanblog.com

按ctrl+d离开,可以使用文件来代替键盘的输入

cat > filea <fileb

[root@localhost /app]#tr 123 ab

123456123

abb456abb

3没有代替的直接用b代替。

[root@localhost /app]#tr  -t 123 ab

12345123456

ab345ab3456

-t选项是截断,相当于3不要了。

[root@localhost /app]#tr -d 'a-z'<fstab

# A ,  ,    '//'

# S   (5), (8), (8) / (8)  

#

UUID=044064-970-41-9-74526493 /                       4            1 1

UUID=859743-0-49-26-803582 /                    4            1 2

UUID=0759--4156-25-23245 /                   4            1 2

UUID=435474-0-47-459-152686446                                 0 0
......

将文件中的小写字母全部删掉。

[root@localhost /app]#tr -d 'a-z'<fstab >fstab2

[root@localhost /app]#cat fstab2

#
......

UUID=044064-970-41-9-74526493 /                       4            1 1

UUID=859743-0-49-26-803582 /                    4            1 2

UUID=0759--4156-25-23245 /                   4            1 2

UUID=435474-0-47-459-152686446                                 0 0
......

转化过后重定向到新的文件中。

[root@localhost /app]#tr -d 'a-z'<fstab >fstab

上面的命令执行会把fstab文件中的内容清空,在单一命令中,一次只能处理一次,打开的同时再重定向是不行的,只能换一个新的文件名。

[root@localhost /app]#tr -s 'a'

asdfaaaaasdfsdfsaaaa

asdfasdfsdfsa

-s是将重复的a进行压缩。

[root@localhost /app]#tr -dc 'a'      

asdfvdssd

sdfas

sdfasdf

这条命令按回车是不会执行的,因为-c是取a的补集,-d是删除,即除了a意思是包括n回车也会当成输入来执行,只能按Ctrl+d进行处理。

[root@localhost /app]#tr -dc 'an '

asdfsdfaaa

aaaa

这样加上回车换行n就可以了。

[root@localhost /app]#cat win.txt

a

b

c[root@localhost /app]#

查看windows上传的win.txt文件

[root@localhost /app]#hexdump  -C win.txt

00000000  61 0d 0a 62 0d 0a 63                              |a..b..c|

00000007

查看windows上传的文件的16进制编码

[root@localhost /app]#cat linux.txt

a

b

c

[root@localhost /app]#

查看linux上的文件linux.txt,内容是一样的。l

[root@localhost /app]#hexdump  -C linux.txt

00000000  61 0a 62 0a 63 0a                                 |a.b.c.|

00000006

查看Linux上的文件和Windows上传文件内容一样。但inux上以前为了节省空间,把回车和换行用一个换行表示,windows上回车是回车换行是换行。

[root@localhost /app]#tr -d 'r' <win.txt  >newwin.txt

[root@localhost /app]#hexdump  -C newwin.txt

00000000  61 0a 62 0a 63                                    |a.b.c|

00000005

这条命令就把windows文件转换为linux文件了,说明windows中的文件和linux中的文件是不同的。

[root@localhost /app]#hexdump  -c linux.txt

0000000   a  n   b  n   c  n                                       

0000006

[root@localhost /app]#hexdump  -c win.txt

0000000   a  r  n   b  r  n   c                                   

0000007

加小c选项可以直接看到回车和换行。

[root@localhost /app]#dos2unix  win.txt

dos2unix: converting file win.txt to UNIX format ...

[root@localhost /app]#hexdump  -c win.txt                  

0000000   a  n   b  n   c                                           

0000005

使用dos2unix可以直接windows文件格式直接转换linux文件格式,当然,unix2dos是转换回去。

[root@localhost /app]#cat aa        

aaa

bbb

ccc

[root@localhost /app]#tr 'n' 't' <aa

aaa     bbb     ccc     [root@localhost /app]#

[root@localhost /app]#

[root@localhost /app]#tr 'n' 'v' <aa

aaa

   bbb

      ccc

         [root@localhost /app]#

将文件中的换行替换成水平tab键(水平制表符)和垂直tab键(垂直制表符)

本文由乐虎游戏发布于计算机资讯,转载请注明出处:第五章 linux重定向和管道

关键词:

Linux 中改过拼写错误的Bash 命令方法,linuxbash

Linux 中纠正拼写错误的Bash 命令方法,linuxbash 我知道你可以按下向上箭头来调出你运行过的命令,然后使用左/右键移...

详细>>

Linux(CentOS 6.5) 下Nginx 安装

Linux(CentOS 6.5) 下Nginx 安装 Nginx一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器,一个Apache服务器不错...

详细>>

bbin官网下载CentOS服务器上安装 Docker详细教程,centosdocker

CentOS服务器上安装 Docker详细教程,centosdocker 1. [[email protected] osem-master]# sudo yum install -y yum-utils device-mapper-persistent-...

详细>>

乐虎国际登录:Win2008 R2 mysql 5.5 zip格式mysql 安装与配置

Win2008 R2 mysql 5.5 zip格式mysql 安装与配置 Win2008 R2 zip格式mysql 安装与配置 一、百度mysql5.6 ZIP 64位免安装版 下载好后 解...

详细>>