[RH124] 5-重定向、管道、编辑器

1.默认输入输出

默认输入---键盘: stdin 

默认输出---屏幕: stdout 

2.输出重定向

重定向:改变数据流输出的位置、方向,例如输出到文件。使用 ">" 表示。

1)普通重定向

命令 > 文件名

例如 ifconfig > ~/leo/log.txt ,将ifconfig的输出重定向到~/leo/log.txt文件中。

  如果多个命令使用">"重定向到同一个文件,那么该文件的内容会被覆盖。

/def/null文件(黑洞):

ls > /dev/null  # /dev/null是一个黑洞。扔进去的内容都会消失。

2)追加重定向

命令 >> 文件名

例如 ifconfig > ~/leo/log.txt,ls >> ~/leo/log.txt 。这样ls的输出就会被追加到~/leo/log.txt的最后。

3)错误重定向

当我们输入一个错误的命令,系统会提示命令不存在。此时我们想重定向该错误信息到文件中,重定向不生效。

这是因为:

">"、">>"只能重定向正确的结果。">"相当于是"1>",">>"相当于是"1>>"。

"2>"就是重定向错误信息,"2>>"是追加错误信息

例如  ifconfig 2> err.txt  ,err.txt中的内容就是ifconfig命令不存在。

4)使用重定向需要注意的点

(如果我们使用xxx > aa.txt来重定向结果。那么会出现什么情况?     首先我们使用的是">",那么系统首先会清空aa.txt的内容,然后执行xxx发现命令不存在,所以最终的结果就是aa.txt被清空,但是内容未写入。)

如果我们想把正确的和错误的都重定向到文件中,怎么办:

 xxxxxx > aa.txt 2>&1  ,相当于把错误的当成正确的(放水)。

 ifconfig 2> aa.txt 1>&2  ,相当于把正确的当成错误的(穿小鞋)。

以上内容比较绕,那我们使用一个统一的标识:

 &> 和 &>> ,分别表示覆盖和追加,前面的&表示不管是正确还是错误。

例如: ifconfig &>> aa.txt,xxxx &>> aa.txt 。这样ifconfig正确结果和xxxx的错误结果都保存到了aa.txt中。

3.输入重定向

 tr "a-z" "A-Z" >> hello.txt < /etc/hosts :将/etc/hosts的内容重定向到tr命令,经过小写到大写的转换后,再重定向到hello.txt中。也可以写作: tr "a-z" "A-Z" < /etc/hosts >> hello.txt 

4.grep

 grep root passwd :把/etc/passwd里含root的所有行过滤出来。

 grep -n root passwd :过滤内容,并显示行号。

 grep -i root passwd :忽略大小写进行过滤。匹配含有root、ROOT、ROot等内容的行。

 grep -v root passwd :反向过滤,匹配不含root的行。

 grep -n -A3 root passwd :过滤含root的行,并且显示后面的3行。

 grep -n -B3 root passwd :过滤含root的行,并且显示前面的3行。

 grep -n -C3 root passwd :过滤含root的行,并且显示前后的3行。

 

 grep ^root passwd :过滤以root开头的行。

 grep root$ passwd :过滤以root结尾的行。

5.管道"|"

 ifconfig | grep inet :将ifconfig命令的输出作为grep的参数,在其中查找包含inet的行。

 cat -n passwd | head -15 | tail -5 : 获取passwd中11行-15行的内容。

6.编辑器

gedit:类似于Windows下的记事本。

vim:vi的增强版。最小化安装系统,默认没有安装vim。

 

命令格式: vim file 。打开file,开始编辑。

学习文档:vimtutor。

vim有三种模式:

1)命令模式:进入vim时默认就是命令模式。

命令模式下的操作:

u:撤销。

ctrl+r:前进,与u撤销相反。

yy:复制行。按完yy后,光标移动要粘贴的位置按p粘贴。

p:粘贴。

nyy:n为数字键,在命令模式下先按数字,表示要复制几行(包含光标所在行),然后按yy。

dd:剪切行,如果剪切后不粘贴,就相当于删除该行。

ndd:类似nyy,即剪切n行。如果文件大,想删除后面所有行,那就使用10000dd,多使用几次就删除了。

x:删除光标当前所在位置的字符。

nx:类似nyy和ndd,不过功能是删除当前光标所在位置后n个字符,如果想删除到末尾,就先输入一个比较大的值就可以了。例如1000x。

r:替换光标所在位置的字符。

R:按完R后,可以连续替换多个字符,完成后按ESC取消R。

ZZ:快捷保存退出,相当于":wq"。

gg:切换到首行。或者1G。

G:切换到最后一行。

nG:切换到第n行,例如1000G,切换到第1000行。如果想切换到尾行,直接输入G。

dG:从光标所在行删除到末尾。如果要删除全部,先按gg,再按dG。

Ctrl+v:进入视图模式,然后按方向键可以选择一批字符,然后做其他操作,例如替换(r),删除(x),复制(y,不是yy)。

如何使用#号注释多行:Ctrl+v,然后按下选择多个字符,按大写的I,然后输入#,再按ESC。

2)插入模式:在命令模式按"i,a,o,I,A,O"可以进入插入模式。

i:从当前光标处插入。

u在命令模式下按u,类似于windows的ctrl+z,撤销。

o:光标所在行的下一行产生一个空白行,并进去插入模式。

I:大写的i。光标移到当前行的最前面,并进入插入模式。

A:大写的a。光标移到当前行的最后面,并进入插入模式。

O:大写的o。在光标所在行的上一行产生一个空白行,并进入插入模式。

3)末行模式:只能从命令模式来进入,所以在插入模式的时候需要先按ESC进入命令模式。再从命令模式进入末行模式。

使用"/"进入:在命令模式按"/",然后 /关键字 ,按n向后查询,按N向前查询。 /关键字\c 忽略大小写查询。

使用":"进入:可以用于保存退出、不保存退出、打开某文件、另存为、执行命令、修改属性、替换。

保存:":w"。

保存并退出:":wq",也可以用":x",不能是"qw"。

不保存并退出:":q!"。

打开某文件:":r file",打开file,并且把内容插入到光标位置的下一行。

另存为:":w filename",将内容另存到指定的file中。

执行命令:将命令执行结果插入到当前光标位置,例如":.!ls /boot",":.!ifconfig"。在命令模式按两下"!",可以自动跳到":.!"。

显示行号:":set number",但显示的行号不是文档的内容,只是编辑器提供的行号。这种操作显示的行号都是临时的。

如果要让vim打开默认显示行号,就在用户的家目录下创建一个文件叫".vimrc"。里面写上set number。只对当前用户有效,对其他用户无效。

如果想让所有用户都默认显示行号,那就编辑/etc/vimrc,在空白行添加set number

 

替换:

 :s/old/new/ ,将光标所在行的第一个old替换为new。

 :s/old/new/g ,将光标所在行所有old替换为new。

 :m,ns/old/new/g ,从m行到n行替换所有的old为new。

 :m,ns/old/new/g ,中的m和n可以使用几个变量,"."表示光标当前行,"$"表示最后一行,"$-1"表示倒数第二行,以此类推。

全文替换:

 :1,$s/old/new/g" ,"1,$"可以使用"%"代替, :%s/old/new/g 。

 :%s/^old/new/g :替换处于开头的old。

当替换的关键字包含特殊字符,例如"/",那么可以使用转义字符。

 :%s/\/old\//new/g :使用转义字符"\"来对"/"进行转移。但是这样显得很复杂。

实际上 :s/old/new/g 中间的分隔符不一定要用"/"。可以使用其他符号代替,例如 :s#old#new#g :s#/old/#new#g 。

 :s/old//g :new的位置什么都不写,就相当于删除old。

分屏:

 :sp 。按两次Ctrl+w可以上下切换。

7.VIM的模板

我们在写shell脚本、Python脚本、Perl脚本等时,我们都要在文档的开头协商 #!/bin/bash 、 #!/usr/bin/python 等。那么我们可以定义一个vim模板,当我们打开一个脚本文件时,自动生成。

1.打开 /etc/vimrc 文件。

2.找到这行:

3.复制一行,修改为: autocmd BufNewFile *.sh 0r /usr/share/vim/vimfiles/template.sh 

4.创建一个文件 /usr/share/vim/vimfiles/template.sh 。在第一行写上 #!/bin/bash 

 

posted @ 2020-03-20 14:14  风间悠香  阅读(246)  评论(0编辑  收藏  举报