初学LINUX笔记(9)正规表示法与文件格式化处理

本文深入探讨正规表示法在文本处理中的应用,包括grep的进阶选项,如-A和-B,以及中括号的使用。讲解了行首^和行尾$的含义,任意字符和重复字符的概念。此外,介绍了printf的格式化打印功能和awk在数据处理中的作用。通过对文件格式化的理解,提升文本操作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正规表示法与通配符是完全不一样的东西』 这很重要,因为『通配符 (wildcard) 代表的是 bash 操作接口的一个功能』,但正规表示法则是一种字符串处理的表示方式, 这两者要分的很清楚才行。

基础正规表示法

语系

不同语系的编码数据并不相同,所以就会造成数据撷取结果的差异

  • LANG=C 时:0 1 2 3 4 … A B C D … Z a b c d …z
  • LANG=zh_TW 时:0 1 2 3 4 … a A b B c C d D … z Z

一般都选用LANG=C来进行文本数据的处理。
同时为了防止不同语系编码不同造成的结果的不同,所以有了一些特殊符号如下:

符号含义
[:alnum:]代表英文大小写字符及数字,亦即 0-9, A-Z, a-z
[:alpha:]代表任何英文大小写字符,亦即 A-Z, a-z
[:blank:]代表空格键与 [Tab] 按键两者
[:cntrl:]代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del… 等等
[:digit:]代表数字而已,亦即 0-9
[:graph:]除了空格符 (空格键与 [Tab] 按键) 外的其他所有按键
[:lower:]代表小写字符,亦即 a-z
[:print:]代表任何可以被打印出来的字符
[:punct:]代表标点符号 (punctuation symbol),亦即:" ’ ? ! ; : # $…
[:upper:]代表大写字符,亦即 A-Z
[:space:]任何会产生空白的字符,包括空格键, [Tab], CR 等等
[:xdigit:]代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字符

grep进阶选项

grep [-A] [-B] [--color=auto] '搜寻字符串' filename
选项作用
-A后面可加数字,为 after 的意思,除了列出该行外,后续的 n 行也列出来;
-B后面可加数字,为 befer 的意思,除了列出该行外,前面的 n 行也列出来;
–color=auto可将正确的那个撷取数据列出颜色(默认关键词显色)

利用中括号

[] 里面不论有几个字符,他都仅代表某『一个』字符。例如t[ae]st仅代表tast或者test,

符号含义
[-]该字符组是连续的,例如大写英文/小写英文/数字等等,就可以使用[a-z],[A-Z],[0-9]等方式来书写
[^]反向选取

行首和行尾字符 $ ^

符号含义
^行首,例如’^the’则为选取the开头的行
$行尾,例如‘.$’则为选取.为结尾的行,其中\为转义

任意字符和重复字符

符号含义
*重复前一个字符,0到无穷
.任意字符

限定连续 RE 字符范围

用{ }可以进行指定字符连续出现次数的限定,例如:
o\{2\} 可以用于设定o连续出现两次,如果限定为2~6次则为o\{2,6\}

文件格式化

这里的格式化指的是:让文件按照你想要的样子进行输出

格式化打印:printf

printf '打印格式' 实际内容
字符样式
\a警告声音输出
\b退格键(backspace)
\f清除屏幕 (form feed)
\n输出新的一行
\r亦即 Enter 按键
\t水平的 [tab] 按键
\v垂直的 [tab] 按键
\xNNNN 为两位数的数字,可以转换数字成为字符。

在这里插入图片描述

awk

用于数据处理

awk '条件类型 1{动作 1} 条件类型 2{动作 2} ...' filename

一般awk处理流程为:

  1. 读入第一行,并将第一行的资料填入 $0, $1, $2… 等变数当中;
  2. 依据 “条件类型” 的限制,判断是否需要进行后面的 “动作”;
  3. 做完所有的动作与条件类型;
  4. 若还有后续的『行』的数据,则重复上面 1~3 的步骤,直到所有的数据都读完为止。

awk还有几个重要的变量:

变量含义
NF每一行拥有的字段数
NR当前行为第几行
FS当前的分割字符,默认为空格键

文件比对工具

diff

以行为单位来对比两个文件

diff [-bBi] from-file to-file
选项作用
-b忽略一行当中,仅有多个空白的差异(例如 “about me” 与 “about me” 视为相同
-B忽略空白行的差异。
-i忽略大小写的不同。

cmp

cmp [-l] file1 file2

-l :将所有的不同点的字节处都列出来。因为 cmp 预设仅会输出第一个发现的不同点

patch

常用于文件更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zccccccc_tz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值