学习视频笔记
在这里,重定向可以做如下理解:
 原来的输出方式好比是向一个水池(屏幕)中放水的水龙头,水就是要输出的内容 

 当把水龙头转接到不是水池的桶(文件)中时,就是重定向输出了。 


 linux中的输出方式主要有: 

 标准输出的两种方式: 

 STDOUT 标准输出 

 STDERR 标准错误 


 屏幕的输出可以被重定向,使得原来应该输出到屏幕上的内容被重定向到其他的地方, 

 比如说是文件: 


 格式:命令 操作 文件名 


 e.g.ls /etc -l 1> ls.txt 2>err.txt 

 其中: 

 命令还是原来操作的命令,所有的已知有输出命令都是可以的。 


 操作是输出的类型,有 

 1> 一类,STDOUT 

 2> 二类,STDERR 

 &> 所有(包括1类和2类消息)注意此时输出中如果有错误信息,会首先输出,无论先执行的是1类还是2类输出 

 >  如果不加数字(类型)默认的是标准输出,即1 

 它所执行的操作是首先将重定向到的文件进行删除, 

 注意这一点,是附加append还是要通过临时文件来写入 


 文件名就是要被重定向到的地方,当原路径中已有此文件就会被覆盖,没有则生成。 


 如果想原文件中的内容不被覆盖而是在后面进行追加(写在后面)那么就可以使用如下的操作 

 1>> 同 >> 

 2>> 

 &>> 

 追加模式时如果被重定向的输出有标准输出和标准错误输出,那么 


 e.g. ls /etc /wrongdir 1>>ls.txt 2>>err.txt 

      ls /etc /wrongdor 1>>ls.txt 2>>ls.txt 

 不过我在ubuntu12.04中试过后看到使用&>>也是可以的。 


 当某类输出被重定向后,该类输出便不会在屏幕上显示 

 当标准输出和标准错误输出同时存在的时候,根据操作的种类决定重定向内容和重定向的文件。 


 head 命令:从头看 

 tail 命令:从尾看 

 后面可以加上参数进行处理: 

 e.g.     cat 5.txt | head -n5   察看前5行的内容 


          cat 5.txt | head -n 10 |tail -n 7 察看4,5,6,7,8,9,10共7行内容用这种方法可以快速截取某大文件中的某一段 

      cat 5.txt | head -n 10 |tail -n 7 >result.txt 

 ------------------------------------- 

 grep 利用正则表达式 达到字符匹配的效果, 

 -i (case-insensitive) 中的关键开关  表示忽略大小写的差异 

 -n  打印出搜到的内容所在的行号 配合vim使用的话,可用vim +行号数字 路径 

 -v  排除掉给定的东西,给出剩下的东西verse 

     cat filename |grep ^# -v |grep -v ^$ 

     cat filename |gerp -Ev '^(#|$)'--------------注意正则表达式的写法 

     以上的两种写法是一致的 

 -A数字      after    在A之后的数字行的内容 

 -B数字        before     在B之前的数字行的内容 


 --------------------------------------- 

 cut命令 按照制定的内容将内容进行切割,相当于split()函数 

 -d (delimiter) 制定分割的分隔符 默认的是Tab e.g.  cut -d: #以:进行切割 

 -f 制定要打印的列   cut -d: -f 1 

 -c 按照字符进行切割  echo "weuhi-qiege-sdfijo"|cut -c 7-11   #切割qiege 


 ---------------------------------------- 

 sort命令 对内容进行排序 

 如果直接用sort命令而不制定按照的内容的格式进行排序,那么默认按照的方式是字符的字典顺序 


 -n 开关,对内容进行排序,排序格式按照的内容是数字 默认是升序 

 -r (reverse)降顺 

 -t c使用c作为字段分隔符 

 -k x对字段x排序     sort -t: -k 3  按照:进行分割后按照第三列进行分割 

 ----------------------------------------- 

 uniq命令 

 将相邻的两行相同的内容进行移除 

 -c 用来统计重复的个数 

 cat num.txt | sort |uniq -c   用于统计文本中出现的内容 




 ----------------------------------------- 

 文本分析工具              

 wc 对文本进行计数 

 -l 行数统计 

 -w 单词数统计 

 -c 字节统计 

 -m 字符统计(不显示) 

 ----------------------------------------- 

 文本分析 对比文件 

 diff 对文本进行对比分析 输出保存到一个文件中,称呼其为“补丁文件” 

 使用时使用 -u作为“统一”格式的diff 适用于补丁文件,便于以后用patch命令进行打补丁 

 diff filename1  filename2 

 出现结果就是两者文件的不同  显示的是两个文件中的不同 

 filename1为左文件    < 原文件 

 filename2为右文件    > 新文件 

 ----------------------------------------- 

 patch  对文件进行大补丁 

 复制所作的改变到其他文件中,使用-b自动备份要改变的文件 


 diff -u foo.conf-broken foo.conf-works >foo.patch 

 patch -b foo.conf-broken <foo,patch 


 ---------------------------------------- 

 tr traslate 翻译转换 

 ---------------------------------------- 

 命令sed(stream editor)全文替换 

 但是其编辑的内容只是流的编辑,当然可以替换的内容重定向到文件 

 sed ‘s/search/replace/’将要找的内容(search)换成要替换成的内容(replace) 

 其中/是定界符 还可以是@ #等 

 g 全局开关,使得如果一行中出现多个要被替换的内容时可以全部被替换 

 i 忽略大小写 

 d 删除 


 命令前添加 m,n表示对[m,n]行区间的内容执行sed '87,93s/search/replace/'命令 

 m=87 n=93 

 sed '/cat/,/dog/s/search/replace'   

 遇到cat直到dog的内容被替换掉 [cat,dog] 


 ----------------------------------------- 

 sed -e '表达式1' -e '表达式2' -e '表达式3' 

 -e开关用法    用一次sed可以执行多个表达式 

 -f开关用法    将命令的表达式写到文件中,然后用sed -f myrule.txt来执行