linux命令三剑客:awk,grep,sed

1.awk

(1)针对文件进行读取过滤:

  打印出每一行:awk '{print $0}'   test.txt              ------------$0表示一整行,$1表示通过空格分割后的第一个元素 ,$2 为第二个元素

  通过 -F 指定分割符: awk -F ':'  '{print $1}'  test.txt           ----------标识每一行用:分割成的元素,打印第一个

(2)处理管道中的内容:

  获取当前目录列表的某列元素: ls | awk '{print $1}'

  增加正则过滤,或者条件过滤: cat test.txt | awk {if {$1>0} print $1}       

                cat test.txt |awk '{/a*a/  print $1 }' 

 

 

2.grep

(1)grep  ' aaa'  test.txt     过滤出包含有aaa的行

(2)cat test.txt  |grep 'g*'    过滤出包含g开头的行

 

3.sed  

  sed命令的选项(option):

  -n :只打印模式匹配的行

  -e :直接在命令行模式上进行sed动作编辑,此为默认选项

  -f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作

  -r :支持扩展表达式

  -i :直接修改文件内容

  动作说明:

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

 注:如果没有加上 -i 是没有实际的修改文件内容的

  未修改源文件:sed '2a  123456' test.txt   

  修改了源文件:sed -i  '2a  123456' test.txt   --在第二行后边加了一行   123456

 

对文件的的增删改查:

(1)增加  a,i

  sed -i  '2a  123456' test.txt   --在第2行的后面加1行 

  sed -i  '1,3a  123456' test.txt     --在1,2,3行后边各增加1行

       sed -i   '1i 123456' test.txt   --在第1行的前面加1行 

(2)删除  d

  sed -i   '2d'  test.txt   --删除第二行

  sed -i  '1,3d ' test.txt   --删除1,2,3行

 

(3)更改  c,s

  sed -i '2c 123456' test.txt   --把第二行替换成123456

  sed -i '1,2c 123456' test.txt      --把1,2行替换成一行  123456

  

  sed 's/old/new/' test.txt          --默认替换每一行的第一个old,换成new

  sed 's/old/new/gi' test.txt  --匹配所有old替换为new代表一行多个,代表匹配忽略大小写

  sed '3,9s/old/new/gi' test.txt   --替换3到9行的所有old,换成new,区分大小写

 

 (4)查询、打印

  sed -n '1,3p' test.txt    --打印1-3行

  sed -n '/222/p'  test.txt   --打印正则匹配到222的行

  sed -n '/222/!p'  test.txt   --打印正则没有匹配到的行

  

(5)执行多条命令-e,执行文件中的命令-f

  sed -e 's/系统/00/g' -e '2d' test.txt

   sed -f ab.log test.txt

posted on 2020-06-03 15:06  老吃鸡  阅读(219)  评论(0编辑  收藏  举报

导航