Linux第九天的学习记录


存疑概念:
 。管线命令
提醒:
 。正规表示法的特殊字符与一般在指令列输入指令的通配符并不相同
 。awk中自定义FS(分隔符)时,需要使用BEGIN,否则定义分隔符对第一行无效
重要知识点:
 第十一章 正规表示法与文件格式化处理
  11.1 开始之前:什么是正规表示法
   。正规表示法
    就是处理字符串的方法,以行为单位来进行字符串的处理行为(通过使用一些特殊符号的辅助)
    一种表示法
   
   *正规表示法与通配符是完全不一样的东西
    通配符是bash操作的一个接口
    正规表示法是一种字符串的处理方式
    
  11.2 基础正规表示法
   11.2.1语系对正规表示法的影响
    。语系会对编码产生影响
   11.2.2grep的一些进阶选项
    grep -A -B --color=auto '搜寻字符串' filename
    
    -A    后面加数字。为after的意思,除了列出该行,后续的n行也列出来
    -B    后面加数字。为befer的意思,与以上功能相似
    --color=auto 可将正确的那个撷取数据列出颜色
     
    例子
     dmesg | grep -n -A3 -B2 --color=auto 'tun'
   11.2.3基础正规表示法练习
    例1:搜寻特定字符串
     grep -n 'the' filename
     反向选择,没有关键词的行数
     grep -vn 'the' filename
     忽略大小写
     grep -in 'the' filename
    例2:利用中括号搜寻集合字符
     grep -n 't[ea]st' filename
     grep -n '[^g]oo' filename
     非小写字母
     grep -n '[^a-z]oo' filename;grep -n '^[:lower:]oo' filename
    例3:行首与行尾字符
     grep -n '^the' filename   //与[^]不同,此为制表符,撷取行开头为the的行
     grep -n '^[a-z]' filename  //撷取行开头为小写字母的行
     grep -n '^[:lower:]' filename
     grep -n '\.$' filename   //撷取行尾不为.的行
    例4:任意一个字符.与重复字符*
     字符+*,代表空字符或一个以上同样字符
    例5:限定连续RE字符范围{}
     grep -n 'o\{2\}' filename   //有两个o的行
     grep -n 'o\{2,5\}' filename   //有两个到五个以上o的行
   11.2.5sed工具
    sed [-nefr] [动作]
    
    -n    使用安静模式。一般用法,所有来自STDIN的数据一般都会被列在屏幕上。加-n后,只有经过sed特殊处理的那一行会被列出
    -e    直接在指令列模式上进行sed的动作编辑
    -f    直接将sed的动作写在一个文件内,-f filename则可以使用filename内的sed命令
    -r    sed的动作支持的是延伸型正规表示法(预设为普通型)
    -i    直接修改读取的文件内容,而不是屏幕输出
   
    动作说明:
     [n1[,n2]]function
     
     n1,n2:不一定会存在,一般代表选择进行动作的行数,举例
     若我的动作是需在10到20行之间进行的,则10,20动作行为
     
     function:
      a  新增,a后接字符串,这些字符串会在新的一行出现(目前的下一行)
      c  取代,c后接字符串,这些字符串可以取代n1,n2之间的行
      d  删除,d后一般无东西
      i  插入,i后接字符串,字符串出现在新的一行(目前的上一行)
      p  打印,将某个选择的数据印出。通常会与sed -n一起运作
      s  取代,直接进行取代工作
      
    。以行为单位新增/删除
     nl /etc/passwd | sed '2,5d'    //删除2~5行后,打印
     nl /etc/passwd | sed '2a drink tea'  //第二行后加新增行drink tea
    。以行为单位的取代与显示
     nl /etc/passwd | sed '2,5c No 2-5 Num' //No Num取代2~5行,成一行
     nl /etc/passwd | sed -n '2,5p'   //不加-n,会列出passwd和2~5行
    。部分数据的搜寻并取代
     sed 's/要被取代的字符/新的字符串/g'
    。直接修改文件内容
     sed -i 's/要被取代的字符/新的字符串/g' filename  //直接修改,无屏幕输出
     sed -i '$a #This is a test' filename    //直接修改,$代表最后一行,a为新增
     
  11.3 延伸的正规表示法
   +   重复一个或一个以上的前一个RE字符
   ?   零个或一个的前一个字符
   |   用or的方式找出数个字符串
   ()   找出群组字符串
    egrep -n 'g(la|oo)d' filename
   ()+   多个重复群组的判别
    egrep -n 'g(oo)+d' filename
    
  11.4 文件的格式化与相关处理
   11.4.1格式化打印:printf
    printf '打印格式' 实际内容
    选项与参数:
    关于格式方面的几个特殊样式:
     \a    警告声音输出
     \b    退格键
     \f    清除屏幕
     \n    输出新的一行
     \r    亦即Enter按键
     \t    水平的tab按键
     \v    垂直的tab按键
     \xNN   NN为两位数字,可以转换为字符
    关于C程序语言内,常见的变数格式
     %ns    n为数字,s代表string,即多少个字符
     %ni    n为数字,i代表int,即多少整数字数
     %N.nf   n/N都为数字,f为浮点数,例子
         若共要十个位数,但小数点有两位,即%10.2f
   11.4.2awk:好用的数据处理工具
    awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
    
    主要处理每一行的字段内数据,而默认的字段分割符为空格键或tab键
     last -n 5 | awk '{print $1 "\t" $3}'
      每一行的每个字段都有变量名称,即$1,$2,$3,$4... 
    
    流程
     1.读入第一行,并将第一行的资料填入,$1,$2,$3...等变数中
     2.根据条件间类型的限制,判断是否需要进行后面动作
     3.做完所有的动作与条件的类型为止
     4.若还有后续的行数据,重复以上1~3步骤,直到所有数据读完
    
    。awk的逻辑运算字符
     >
     <
     >=
     <=
     ==
     !=    以上与通常功能相似
     
    。awk中使用运算
     cat pay.txt | awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"} 
     > NR>=2{total=$2+$3+$4
     > printf "%10s %10d %10d %10d %10.2f\n",$1,$2,$3,$4,total}'
      1.awk指令间隔:所有awk的动作,如果需要多个指令辅助时,可利用';',或者直接以Enter按键隔开指令
      2.格式化输出时,必须加\n,才能分行
      3.awk中可直接使用变量,不必加$
   11.4.3文件对比工具
    。diff(通常用作在同一文件/软件的新版本与原始文档的差异)
    diff [-bBi] from-file to-file
    *from-file可以-取代,-表示STDIN
    
    -b    忽略一行当中,仅有多个空白的差异
    -B    忽略空白行差异
    -i    忽略大小写不同
    
    。cmp(主要利用字节单位比对,diff以行)
    cmp [-l] file1 file2
    
    。patch(将旧的文件升级为新的文件,与diff密不可分)
    
   12.4.4文件打印准备:pr
    
    
   
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值