Linux 正规表示法及文件格式化

目录

1.基础正规表示法

1.1 语系对正规表示法的影响

​如上图,如果想撷取大写字符[A-Z],LANG=C语系会捕捉到所有大写字母,而LANG=zh_TW语系,会捕捉到除了所有大写字母外的小写字母b-z.所以使用正规表示法要注意环境的语系.另外,为了避免这样编码所造成的英文与数字的撷取问题,有如下特殊符号

1.2.grep的进阶选项

1.3 正规表示法基础

1.4 基础正规表示法字符汇整

1.5 sed工具

1.5.1 sed以行为单位的新增/删除功能

1.5.2 sed以行为单位的取代与显示功能

1.5.3 sed部分数据的搜寻并取代的功能

1.5.4 sed直接修改文件内容

2 延伸正规表示法

3 文件格式化与相关处理

3.1 格式化打印:printf

3.2 awk 好用的数据处理工具

3.2.1整个awk的处理流程

3.2.2 awk的内建变量,必须大写,且不需要$​

3.2.3 awk的逻辑运算符


1.基础正规表示法

1.1 语系对正规表示法的影响


如上图,如果想撷取大写字符[A-Z],LANG=C语系会捕捉到所有大写字母,而LANG=zh_TW语系,会捕捉到除了所有大写字母外的小写字母b-z.所以使用正规表示法要注意环境的语系.另外,为了避免这样编码所造成的英文与数字的撷取问题,有如下特殊符号


1.2.grep的进阶选项

1.3 正规表示法基础

  • 搜寻特定字符串直接在单引号中写
    grep -n '关键字'  文件档名   
    反选选择 选项  -v
  • 利用中括号[]搜寻集合字符
    grep -n 't[ea]st' 文件档名   搜寻带有test 或 tast 的行,注意只能取到[]中的一个
  • 反向选择^
    grep -n '[^ab]hhh' 文件档名 搜寻关键字'hhh'但是前边不能带a或者b
    注意^在[]内,如果在[]外是另一个意思"字首符号"
  • 连续选择符号-
    grep -n '[^a-z]hhh' 文件档名 搜寻不以小写字母开头并且后边连接"hhh"的行,也可以用下边的代替
    grep -n '[^[:lower:]]hhh' 文件档名
  • 行首符与行尾符^$
    grep -n '^the' 文件档名  搜寻以"the"开头的行
    grep -n '^[^a-z]' 文件档名  搜寻不以小写字符开头的行
    grep -n '/.$' 文件档名  搜寻以"."结尾的行,"."需要用逃脱符\来解除它的特殊意义
    grep -n '^$' 文件档名  搜寻空白行
  • 任意一个字符『.』
    grep -n 'g..d' 文件档名 搜寻g??d这样的关键字,如good,gaad,glad
  • 0到无穷次前一个字符*
    grep -n 'go*d' 文件档名 搜寻g和d中间没有或者有n个o的关键字所在的行,如gd,god,good,goo……d
    与通配符*意义完全不同
  • 0个或多个任意字符『.*』
    grep -n 'a.*b' 文件档名 搜寻行中含有ab的行,无论ab中间有多少个其他任意字符
  • 连续限定字符范围 {}
    grep -n '[a-z]/{1,5/}' 文件档名  搜寻1到5个小写字母所在的行
    {和}是有特殊意义的字符,所以需要用逃脱符/
    {}中间只有一个数字代表固定个个数

1.4 基础正规表示法字符汇整




1.5 sed工具

sed是管线命令,它可以撷取/删除/取代/新增数据,甚至可以修改源文件.


1.5.1 sed以行为单位的新增/删除功能

nl /etc/passwd | sed '2,5d'
删除文件的第二行到第五行,这里应该加上选项 -e ,不加也可以实现,但是有两个动作function时候必须加上-e.
sed后边的动作必须用单引号括起来

nl /etc/passwd | sed '2d' 只删除第二行

nl /etc/passwd | sed '2,$d' 删除第二行到最后一行,$代表最后一行

nl /etc/passwd | sed '2a 你好'
在第二行后边增加一行,如果是想在第二行前边增加,用 -i 参数
如果想插入两行,要用逃脱符\

nl /etc/passwd | sed '/^$/d' 
删掉空白行

1.5.2 sed以行为单位的取代与显示功能

nl /etc/passwd | sed '2,5c 你好'
用字符取代第二行到第五行

nl /etc/passwd | sed -n '10,20p'
显示第10行到第20行,如果不加-n选项会将所有数据列出来,第10行到第20行再列出来一遍

1.5.3 sed部分数据的搜寻并取代的功能

与vi相当类似

sed 's/要被取代的字符串/新的字符串/g'
红色部分是这个语法的关键字.

1.5.4 sed直接修改文件内容

危险动作,修改源文件内容,加上-i选项(不是动作的参数,是命令的选项).
sed -i '1d' 文件档名  删除第一行

2 延伸正规表示法

延伸正规表示法多了一些特殊字符,还需要用支持延伸正规表示法的命令,如egrep  或 grep -E


3 文件格式化与相关处理

3.1 格式化打印:printf


3.2 awk 好用的数据处理工具

awk 是以行为一次处理单位,以字段为最小处理单位

awk后续所有动作都要在一对单引号内,awk是管线命令,它主要处理每一行的字段内的数据,而默认字段分割符是空格键或[tab]键
awk最常用的动作
last -n 5| awk '{print $1 "-" $2}'
$0代表一整行数据,$1代表分割后第一个字段,$2代表分割后第二个字段.....

3.2.1整个awk的处理流程

  1. 读入第一行,并将第一行的资料填入$0,$1,$2... 等变数中
  2. 依据条件类型限制,判断是否需要进行后边的动作
  3. 做完所有的动作与条件类型
  4. 若还有行,重复上边的动作,直到结束

3.2.2 awk的内建变量,必须大写,且不需要$

3.2.3 awk的逻辑运算符

一个实用的例子:查看passwd文件中,用[:]分割字段,第三个字段长度小于10,并显示第一个字段和第三个字段

cat /etc/passwd | awk 'BEGIN {FS=":"} $3 > 10 {print $1 "  \t" $3}'

因为定义了FS,所以第二行才能生效.因此加上BEGIN

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值