加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

搞定 Linux Shell 文本处理工具,看完这篇集锦就够了

发布时间:2019-10-16 09:35:55 所属栏目:建站 来源:大CC
导读:Linux Shell是一种根基功,因为独特的语法加之较差的可读性,凡是被Python等剧本取代。既然是根基功,那就必要把握,事实进修Shell剧本的进程中,照旧能相识到许多Linux体系的内容。 Linux剧本人人不是大家都可以到达的,可是用一些简朴的Shell实现一些常

行使不带参数的print时,会打印当前行;

  1. echo -e "line1 
  2.  
  3. ine2" | awk 'BEGIN{print "start"} {print } END{ print "End" }' 

print 以逗号支解时,参数以空格定界;

  1. echo | awk ' {var1 = "v1" ; var2 = "V2"; var3="v3"; print var1, var2 , var3; }'$>v1 V2 v3 

行使-拼接符的方法(""作为拼接符);

  1. echo | awk ' {var1 = "v1" ; var2 = "V2"; var3="v3"; print var1"-"var2"-"var3; }'$>v1-V2-v3 

非凡变量:NR NF $0 $1 $2

NR:暗示记录数目,在执行进程中对该当前行号;

NF:暗示字段数目,在执行进程总对该当前行的字段数;

$0:这个变量包括执行进程中当前行的文本内容;

$1:第一个字段的文本内容;

$2:第二个字段的文本内容;

  1. echo -e "line1 f2 f3 
  2.  
  3. line2 
  4.  
  5. line 3" | awk '{print NR":"$0"-"$1"-"$2}' 

打印每一行的第二和第三个字段:

  1. awk '{print $2, $3}' file 

统计文件的行数:

  1. awk ' END {print NR}' file 

累加每一行的第一个字段:

  1.  echo -e "1 
  2.  
  3.  
  4.  
  5.  
  6. " | awk 'BEGIN{num = 0 ;  print "begin";} {sum += $1;} END {print "=="; print sum }' 

转达外部变量

  1. var=1000echo | awk '{print vara}' vara=$var #  输入来自stdinawk '{print vara}' vara=$var file # 输入来自文件 

用样式对awk处理赏罚的行举办过滤

awk 'NR < 5' #行号小于5

awk 'NR==1,NR==4 {print}' file #行号便是1和4的打印出来

awk '/linux/' #包括linux文本的行(可以用正则表达式来指定,超等强盛)

awk '!/linux/' #不包括linux文本的行

配置定界符

行使-F来配置定界符(默以为空格)

  1. awk -F: '{print $NF}' /etc/passwd 

读取呼吁输出

行使getline,将外部shell呼吁的输出读入到变量cmdout中;

  1. echo | awk '{"grep root /etc/passwd" | getline cmdout; print cmdout }' 

在awk中行使轮回

  1. for(i=0;i<10;i++){print $i;} 
  2.  
  3. for(i in array){print array[i];} 

eg:

以逆序的情势打印行:(tac呼吁的实现)

  1. seq 9| awk '{lifo[NR] = $0; lno=NR} END{ for(;lno>-1;lno--){print lifo[lno];}} ' 

awk实现head、tail呼吁

head:

  1. awk 'NR<=10{print}' filename 

tail:

  1. awk '{buffer[NR%10] = $0;} END{for(i=0;i<11;i++){  print buffer[i %10]} } ' filename 

打印指定列

awk方法实现:

  1. ls -lrt | awk '{print $6}' 

cut方法实现

  1. ls -lrt | cut -f6 

打印指定文本地区

确定行号

  1. seq 100| awk 'NR==4,NR==6{print}' 

确定文本

打印处于start_pattern 和end_pattern之间的文本;

  1. awk '/start_pattern/, /end_pattern/' filename 

eg:

  1. seq 100 | awk '/13/,/15/'cat /etc/passwd| awk '/mai.*mail/,/news.*news/' 

awk常用内建函数

index(string,search_string):返回search_string在string中呈现的位置

sub(regex,replacement_str,string):将正则匹配到的第一处内容替代为replacement_str;

match(regex,string):搜查正则表达式是否可以或许匹配字符串;

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读