📢📢📢 阿里云双十一,赠送您一张全场8折折扣优惠券

📢📢📢 2核2G3M的服务器,99元一年,新老用户续费同享!!

Linux 基本命令 (2) >和他的小伙伴 | grep sed

今天五一结束了    这个文章都已经写了好几天了都    每次都存在草稿箱里   昨天晚上还断网了。。。。  然后用了cmcc才传上去的那部分。。。。  然后我就想啊   要不先分开写吧  再合并起来  后来又想啊刚刚   都已经写了这一段了都  就别合并了吧     恩 就不合并了  就这样吧

6. >>和<<    >和    2>     还有tee

这个吧  算不是命令   一般都是和其他的命令结合起来用的 >>和>用的比较多  表示输出重定向    例如 ls  >>  heh   表示 列出文件目录 把列出的内容 输入到heh这个文件   屏幕上也不会显示  >>和>用法上一样的  >是覆盖文件内容  >>是在文件的末尾追加内容  如果既要写入到文件 又要显示在屏幕  就要用tee 这个命令用法   ls  tee  heh   一般用来作为日志的信息记录起来     至于2>  是把错误输出的内容重定向    前面那两个是把正常输出的内容重定向   例如  cat   file  >heh  2>heh2     如果存在file文件  就会读取这个文件 然后输入到heh里面  如果不存在file或者没有权限读取或者其他      cat出错了     如果没有2>  屏幕上还是会提示说文件不存在什么的或者其他的错误信息    但是用了2>  就会把这些错误信息输入到 heh2这个文件里面      然后屏幕上就什么都没有显示    还有个小窍门cat   > heh  这样就可以在屏幕上用键盘文本然后写入到heh这个文件了  最后要用ctrl D结束输入    表示文件结束了    至于<<和< 是重定向输入   我也没用过  不知道什么用的  顺便提一下一个特殊的文件  /dev/null  这个是一个黑洞   无论什么东西输入进去都可以吞噬掉   比如说   某个命令会产生很多的提示  但是又没什么用的  不想占屏幕  就可以重定向到这里

7. | (管道)

管道   这个东西啊  神奇   功能和重定向输出我觉得差不多  重定向是把输出的东西定向到文件里  |  这个就是吧输出的东西定向到另外的命令里   这个之前在find 里面举过一个例子    我就举另外的例子好了      比如说在一个存字符界面里   要读取一个有点大的文件  一个屏幕都放不下的那么多  cat没法查看啊   就用less或者more来读取   翻页啊什么的  我还是比较喜欢less    好了  这是一个关于less的用法的说明    接下来是|  的例子   比如说 要查看的不是文件    比如 set   (输入set这个命令可以查看到很多的配置 的东西 比如环境变量啊  各种东西)  直接输入set  屏幕显示一大片内容  一个屏幕放不下啊   解决方案有两个  一个是 set  >> heh  &&  less  heh  先把set的内容写到heh里面  然后用less读取  这个还要生成一个多余的文件 麻烦啊    另外一种方法是用管道  set  |  less    把输出的东西通过管道发给less  用less打开   这个管道的一个不常用例子  更常用的还是和 接下来的这个命令grep结合起来一起用     还有  不是所有的命令都支持管道的   支持的被称为管道命令

8. grep

查找   这个东西  超级屌  算是非常高级的命令了我感觉   非常高冷   可以查找文件的内容  它是以行为单位的      grep  'heh'   file    在file里面查找heh   显示出查找到的那几行的内容  ** 这里用单引号比较好**   支持正则表达式的哦   grep 还有一些参数  每个都很有用

  • -i  忽略大小写  
  •  -n 同时输出查找到的内容的行号  
  •  -v  反向  显示没查找到的行    
  •  -c  统计查找到的次数    
  •  -A2   -B3  同时列出查找到的前两行和后三行的内容   和正则表达式一起用

例子 查看 httpd.conf 里面的内容  因为里面包含了超级多的注释和空行 非常占屏幕  就用grep过滤一下看  

1
grep   -v    '^#'   httpd.conf   |  grep  -v  '^$'   | less  

首先过滤掉#开头的的行 吧结果通过管道输入到下一个grep    第二个grep把前面输入的内容进行操作  再过滤掉空行    把结果再通过管道传入下个命令  最后  用less查看最终的无空行无注释版的httpd.conf

9. sed

操作文本数据   这个命令很强大   而且有点复杂   基本的用法是 sed  参数  命令  文件
参数 有好几个 都是很有用的  -n  将操作了的行输出   如果不加 将会把操作后的整个文件都输出   -e  默认的参数 将结果输出到屏幕    -r  支持扩展正则表达式  反正我现在是不会   如果不写 只是支持基础正则        -i  和e相反  将操作后的数据直接写会文件  也就是直接操作文件的意思    这个就有点厉害了   第一次遇到能直接操作文件的命令
命令  也有好几个  

  1. a  增加行      
  2. c替换行    
  3. d 删除行    
  4. i插入  这个和a不一样  a是增加在下一行  i是插入在上一行    
  5. p  输出行    
  6. s  替换文本  这个是替换文本  可以用正则表达式  
  7. c是把原来的行清空  换成另外的行

分别举个例子吧   不然看不明白    

在heh文件的第一行下面加上一行 内容为 hhhhh  

1
2
3
4
5
6
7
8
9
10
11
sed  -i   '1a  hhhhh'  heh 
```
把heh的第一行到第四行删除掉  $可以表示最后  
```bash
sed  -i   '1,4d'  heh
```  
c和i和p的用法也差不多 我就不写了  

把gogle  或者 google 或者 gooogle 等等等类似的匹配到的文本换成baidu
```bash
sed  -i  '1,3s/go+gle/baidu/'   heh

大概就这样吧 这命令   还有要注意 用单引号 其实加双引号单引号或者不加引号都是可以的  只是因为转义什么的原因  用单引号最好  比如要添加一行 内容是一个\    
单引号版本

1
2
3
4
5
6
sed  -i '1a  \\'  heh
```  

双引号版本
```bash
sed  -i "1a  \\\\"  heh

就是四个  没有引号  

1
sed  -i   1a\  \\\\    heh

原来引号里面的空格要转义  所以在a后面还有一个       空格后面反斜杠的转义也要用四个  这是因为 单引号的内容直接作为sed的参数传入  双引号和无引号的先作为终端的输入 先做转义 四个变成两个  然后转义完的两再作为sed的参数传入  这样就导致了  转义的问题 给人误导了
还有!!  sed也是一个管道命令  可以和 | 一起用