正则表达式与文件格式化处理

正则表达式就是处理字符串的方法,它以行为单位来进行字符串的处理操作,正则表达式通过一些特殊符号的辅助,可以让用户轻易地完成【查找、删除、替换】某特定字符串的处理过程。

正则表达式表示方式依据不同的严谨度分为:

  • 基础正则表达式
  • 扩展正则表达式

基础正则表达式

语系对正则的影响

字符文字与数字都是通过编码表转换来的。由于不同的语系的编码数据并不相同,所以就会造成数据选取结果的差异。所以在使用正则表达式时,需要特别留意当时环境的语系是什么,否则可能会发现与别人不相同的选取结果。

grep的高级选项

1
2
# n 表示数字
grep [-An] [-Bn] [--color=auto] '查找字符' filename
  • -A:后加数字,列出该行外,后续的n行也列出来
  • -B:后加数字,列出该行外,前面的n行也列出来
  • –color=auto:选取数据列出颜色

基础正则表达式字符集合

RE字符 意义
^word 带查找的字符串(word)在行首
word$ 带查找的字符串(word)在行尾
. 代表【一定有一个任意字符】
\ 转义符
* 重复零个到无穷多个的前一个字符
[list] 字符集合,从里面取出想要选取的字符;[]仅代表一个待查找字符
[n1-n2] 字符集合,列出想要选取的字符范围
[^list] 字符集合,列出里面不想要的字符串或范围
\{n,m\} 连续n到m个的【前一个RE字符】
若\{n\},则是连续n个的前一个RE字符
若\{n,\},则是连续n个以上的前一个RE字符

注意:正则表达式的特殊字符与一般在命令行输入命令的通配符并不相同。

sed工具

sed本身也是一个管道命令、可以分析标准输入;还可以进行替换、删除、新增、选取特定行等功能。

1
sed [-nefr] [操作]

参数说明:

  • -n:安静模式,加-n参数,就只有经过sed处理过的那一行或操作才会被列出来;
  • -e:直接在命令行模式上进行sed操作编辑
  • -f:直接将sed的操作写在一个文件内
  • -r:使用扩展性正则语法(默认是基础正则表达式语法)
  • [操作]:格式:[ n1 [ , n2 ] ] function
    • n1, n2:一般代表【选择进行操作的行数】
    • function:
      • a:新增,后接字符作为新增加的,在新的一行里出现
      • c:替换,后接字符替换n1,n2之间的行
      • d:删除,d后不接任何字符
      • i:插入,后接字符,插入新的一行出现
      • p:打印,通常p会与参数sed -n一起运行
      • s:替换,可以搭配正则表达式

示例

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

1
2
3
4
# 内容列出并打印行号,同时删除2~5行
nl /etc/passwd | sed '2,5d'
# 新增
nl /etc/passed | sed '2a qixige'

扩展正则表达式

RE字符 意义 示例 ( egrep 等价 grep -E)
+ 重复【一个或一个以上】的前RE字符 egrep -n 'go+d' re.txt
【零个或一个】的前一个RE字符 egrep -n 'go?d' re.txt
| 用或(or)的方式找出数个字符串 `egrep -n ‘gd
() 找出【群组】字符串 `egrep -n ‘g(la
()+ 多个重复群组的判别 `echo ‘AxyzxyzxyzC’

文件的格式化与处理

awk:数据处理工具

awk是一个适用于处理小型文本数据的数据处理工具。将一行数据分成几个字段来处理。

格式如下

1
awk '条件类型1 {操作1} 条件类型2 {操作2} ...' filename
  • awk主要是处理每一行的字段内的数据,默认的字段分隔符为“空格键”或【tab】键;
  • 连续性的数据不要使用空格或[TAB]在内;
  • 每一行的每个字段都有变量名称,$1,$2等;
  • $0代表【一整列数据】;
  • awk是以行为一次处理的单位,以字段为最小的处理单位。

awk处理流程:

  1. 读入第一行,将第一行的数据写入$0,$1,$2等变量中;
  2. 根据“条件类型”的限制,判断是否需要进行后面的“操作”;
  3. 完成所有操作与条件类型;
  4. 如果后续还有【行】的数据,则重复1~3步骤。

内置变量:

变量名称 意义
NF 每一行($0)拥有的字段总数
NR 目前awk所处的是第几行数据
FS 当前的分隔符,默认是空格键

逻辑运算:

>、<、>=、<=、==、!=

1
2
# BEGIN:预先设置awk变量; 下面命令如果没有BEGIN,会不显示第一行
cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'

文件比对工具

同一个软件包不同版本之间,比较配置文件与原始文件的差异。

diff

diff通常是用在同一个文件(或软件)的新旧版本差异上。主要是以【行】为单位比对。

1
diff [-bBi] from-file to-file

参数说明:

  • from-file:原始比对文件

  • to-file:目的比对文件

  • -b:忽略一行中仅有多个空白的差异

  • -B:忽略空白行的差异

  • -i:忽略大小写不同

cmp

cmp是以【字节】为单位去比对。

1
cmp [-l] file1 file2

参数说明:

  • -l:将所有不同点的字节都列出来。默认仅会输出第一个发现的不同点

文件打印设置:pr

详情参考 pr --help

参考资料

《鸟哥的LINUX私房菜》

-------------本文结束感谢您的阅读-------------

本文标题:正则表达式与文件格式化处理

文章作者:Mr.wj

发布时间:2019年12月25日 - 21:11

最后更新:2019年12月25日 - 21:13

原始链接:https://www.wjqixige.cn/2019/12/25/正则表达式与文件格式化处理/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Mr.wj wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!