Linux学习笔记(7)正则表达式

    技术2026-01-14  5

    Regular Expression 正则表达式 是处理字符串的方法,以行为单位进行字符串的处理操作,通过一些特殊付好的辅助可以轻易的完成查找删除操作。 语系的问题 LANG=C语系,不同语系的语法规则不一样,需要特别注意。

    1.正则表达式与grep

    [:alnum:]//代表英文大小写字符和数字0-9 a-z A-Z [:alpha:]//代表任何英文字母大小写 a-z A-Z [:blank:]//代表空格和TAB [:cntrl:]//键盘上的控制键ctrl tab等 [:digit:]//代表数字 0-9 [:graph:]//除了空格以外的所有按键 [:lower:]//代表小写字母 [:print:]//代表任何可以被打印出来的字符 [:punct:]//代表标点符号"!'?;:#$" [:upper:]//代表大写字母 [:space:]//代表会产生空白的字符 [:xdigit:]//16进制数字及字符

    1.查找特定字符串

    grep -n 'the' regular_express.txt//-n 是显示行号 关键词自动高亮 //-i忽略大小写 -v反向选择 即不含the的

    2.利用中括号[]查找

    grep -n 't[ae]st' regular_express.txt

    不管中括号中有几个字符都只代表了一个字符

    grep -n '[^g]oo' regular_express#[^g]反向选择 不想要g开头的出现 #一定要记得制表符是在中括号里面

    grep -n '^[a-z]oo' regular_express#可用^[]来反向选择

    也可以使用如下代码

    grep -n '[^[:lower:]] regular_express#相当于递归即就是[^a-z]

    3.行首与行尾字符

    grep -n '^the' regular_express#''中加制表符表示希望查找关键词 #在句首出现的句子

    4.任意字符. 和 重复字符’*’

    grep -n 'g..d' regular_express#..可以代替任何字符

    grep -n 'oo*' regular_express #*意味重复0个或一个以上的o字符 #因此o*意为 拥有空字符或一个以上的o #oo*拥有至少一个o #ooo*拥有至少两个o

    5.限定连续字符数量的{}

    grep -n 'go\{2,5\}g' regular_express#用\来无效化{}

    2.sed工具

    sed也是管道命令

    sed [-nefr] [n1,n2 function] [文本文件] -n #安静模式 在一般语法中会全部输出到屏幕上 但安静模式下只有被处理 #的那一行才会输出 nl regular_express |sed '2,5d'#删除2-5行 并把删除后的文件打印在屏幕上 function a#新增 a后可以接字符 并插入到下一行 sed '2a drink tea' regular_express#这行字插入到第三行 sed '2a drink tea\ drink bear'#多行插入的方法 c#替换 c后接字符替换n1 n2中间的行 d#删除 i#插入 i后接字符 插入到上一行 p#打印 将某个选择的参数打印出来 s#替换

    3.扩展正则表达式

    + #意义:一个或一个以上的前一个字符 egrep -n 'go+d' regular_express#o+代表一个以上的o ? #意义:零个或一个的前一个字符 egrep -n 'go?d' regular_express#代表空的或一个o | #用或or的方式找出数个字符串 egrep -n 'gd|good' regular_express#找gd和good egrep -n 'gd|good|dog' regular_express#找gd和good和dog ()#找出群组字符串 egrep -n 'g(la|oo)d' regular_express

    4.文件的格式化和相关处理

    1.awk数据处理工具

    awk的后续操作都是以单引号括住的,需要用print打印时,非变量部分需要用双引号括住。(print默认输出完换行,printf为输出后不换行)

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

    取出后五条登录信息,用管道传输给awk,在屏幕上打印第一个变量和第三个变量,中间以一个tab间隔。

    NF #每一行拥有的字段总数 NR #目前awk所处理的是第几行数据 FS #目前的分隔字符

    2.diff和cmp文件对比

    diff [-bBi] from-file to-file from-file #文件名,作为原始文件 to-file #目标文件 -b#忽略一行中多个空白的差异 -B#忽略空白行的差异 -i#忽略大小写差异 cmp#利用字节单位去对比
    Processed: 0.013, SQL: 9