正则表达式

文章介绍了Linux环境中用于文本处理的基础正则表达式,包括特殊符号和元字符的含义,以及grep的进阶选项。同时,讲解了sed工具的使用,如添加、替换和删除行的操作,并提到了延伸正则表达式。此外,还讨论了文件的格式化打印、awk数据处理工具和文件对比工具如diff、cmp及patch的应用。

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

一、基础正则表达式

1. 特殊符号

特殊符号代表意义
[: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 的数字与字符

2. grep进阶选项

grep [-A] [-B] [--color=auto] '搜寻字串' filename
​
选项与参数:
-A:后面可加数字,为 after 的意思,除了列出该行外,后续的 n 行也列出来;
-B:后面可加数字,为 befer 的意思,除了列出该行外,前面的 n 行也列出来;
--color=auto 可将正确的那个撷取数据列出颜色

3. 基础正则表达式字符

RE 字符意义
^word待搜寻的字串(word)在行首
word$待搜寻的字串(word)在行尾
.代表“一定有一个任意字符”的字符(需要跳脱字符)
\跳脱字符,将特殊符号的特殊意义去除
*重复零个到无穷多个的前一个 RE 字符
[list]字符集合的 RE 字符,里面列出想要撷取的字符
[n1-n2]字符集合的 RE 字符,里面列出想要撷取的字符范围
[^list]字符集合的 RE 字符,里面列出不要的字串或范围
{n,m}连续 n 到 m 个的“前一个 RE 字符” ,若为 {n} 则是连续 n 个的前一个 RE 字符,若是 {n,} 则是连续 n 个以上的前一个 RE 字符(需要跳脱字符)

4. sed工具

sed [-nefr] [动作]
​
选项与参数:
-n:使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。
-e:直接在命令行界面上进行 sed 的动作编辑;
-f:直接将 sed 的动作写在一个文件内, -f filename 则可以执行 filename 内的 sed 动作;
-r:sed 的动作支持的是延伸型正则表达式的语法(默认是基础正则表达式语法);
-i:直接修改读取的文件内容,而不是由屏幕输出;
​
动作说明:[n1[,n2]]function
n1, n2:不一定会存在,一般代表“选择进行动作的行数”;
​
function:
a:新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行);
c:取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行;
d:删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p:打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行;
s:取代,可以直接进行取代的工作哩,通常这个 s 的动作可以搭配正则表达式;

二、延伸正则表达式

RE字符意义
+重复一个或一个以上的前一个 RE 字符
零个或一个的前一个 RE 字符
|用或( or )的方式找出数个字串
()找出群组字串
()+多个重复群组的判别

三、文件的格式化与相关处理

1. 格式化打印

“printf '打印格式' 实际内容
​
选项与参数:
关于格式方面的几个特殊样式:
\a    警告声音输出
\b    倒退键(backspace)
\f    清除屏幕 (form feed)
\n    输出新的一行
\r    亦即 Enter 按键
\t    水平的 [tab] 按键
\v    垂直的 [tab] 按键
\xNN  NN 为两位数的数字,可以转换数字成为字符。
关于 C 程序语言内,常见的变量格式:
%ns   那个 n 是数字, s 代表 string ,亦即多少个字符;
%ni   那个 n 是数字, i 代表 integer ,亦即多少整数码数;
%N.nf 那个 n 与 N 都是数字, f 代表 floating (浮点);

2. awk数据处理工具

awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
  • 处理流程:

    • 读入第一行,并将第一行的数据填入 $0, $1, $2.... 等变量当中;

    • 依据 "条件类型" 的限制,判断是否需要进行后面的 "动作";

    • 做完所有的动作与条件类型;

    • 若还有后续的“行”的数据,则重复上面 1~3 的步骤,直到所有的数据都读完为止;

  • 内置变量

    • NF:每一行拥有的字段总数;

    • NR:目前所处理的行数;

    • FS:目前的分隔字符,默认为空白键;

  • 逻辑运算字符

    运算单元代表意义
    >大于
    <小于
    >=大于或等于
    <=小于或等于
    ==等于
    !=不等于

3. 文件对比工具

  • diff:以行为单位对比两个文件之间的差异;

    diff [-bBi] from-file to-file
    ​
    选项与参数:
    from-file :一个文件名,作为原始比对文件的文件名;
    to-file   :一个文件名,作为目的比对文件的文件名;
    from-file 或 to-file 可以 - 取代,那个 - 代表“Standard input”之意;
    -b:忽略一行当中,仅有多个空白的差异(例如 "about me" 与 "aboutme" 视为相同;
    -B:忽略空白行的差异;
    -i:忽略大小写的不同;
  • cmp:以字节段位对比两个文件之间的差异;

    cmp [-l] file1 file2
    ​
    选项与参数:
    -l:将所有的不同点的字节处都列出来。因为 cmp 默认仅会输出第一个发现的不同点;
  • patch:

    patch -pN < patch_file    <==更新
    patch -R -pN < patch_file <==还原
    ​
    选项与参数:
    -p:后面可以接“取消几层目录”的意思;
    -R:代表还原,将新的文件还原成原来旧的版本;

4. 文件打印准备

  • pr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值