码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-03-20 14:28:08      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:alt   分隔符   错误信息   其他   包含   number   set   增强   模式   

1.默认输入输出

默认输入---键盘:stdin

默认输出---屏幕:stdout

2.输出重定向

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

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

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

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

 

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

 

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

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

"2>"就是重定向错误信息,"2>>"是追加错误信息。例如xxx 2> err.txt,err.txt中的内容就是xxx命令不存在。

 

如果我们使用xxx > aa.txt来重定向结果。那么会出现什么情况?

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

 

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

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

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

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

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

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

 

xxxxx >> log.txt 2>>err.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

 

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

标签:alt   分隔符   错误信息   其他   包含   number   set   增强   模式   

原文地址:https://www.cnblogs.com/leokale-zz/p/12531423.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!