美文网首页
CentOS 文本处理

CentOS 文本处理

作者: 10点睡7点起 | 来源:发表于2018-03-19 21:19 被阅读0次

    文本处理


    基本文本处理工具

    • 列拼接并打印输出:cat -n file1 file2(将文件内容拼接输出并显示行号)
    • 行拼接并打印输出:paste file1 file2 按行合并两个文件内容并打印输出
      • paste -d% file1 file2:指定分隔符的形式 “%” 为分隔符
      • paste -s file:file文件中的所有行合并成一行输出
    • 输出文件的前几行:head -n num ,选项-c#:获取指定的前#个字节
    • 输出文件的后几行:tail -n num ,选项 -f:跟踪命令,可以时时打印输出文件增加的内容
    • 按列取出文件内容:cut(要求有明确的分隔符)
      • 例子:cut -d: -f1,3-5 file (取出file中按:分割的第1列,3-5列)
      • 例子:cut -c34-43 file (取出file文件中第34到43列的所有字符)
    • 文件内容按行反序输出:tac file (从最后一行到第一行)
    • 文件内容按列逆向输出:rev file (从行尾到行首)
    • 文本数据统计:wc -lLc file
    • 文件内容排序:sort -rnu file (文件内容逆序、按数值、去重排序,不修改文件)
    • 重复行报告处理:uniq -cdu file(连续出现并且完全相同定义为重复)(重复数、显重、显不重)

    通配符以及正则

    通配符针对文件名的匹配操作

    • 括号扩展: {}表示括号内的内容全部展开; [] 表示括号中的任意一个
    • 文件通配符:* 匹配零个或者多个字符; 匹配任何单个字符; [^]匹配指定范围外的任意单个字符
    • 查看预定义的通配符 man 7 glob

    正则针对文件内容的匹配操作

    • 正则表达式:基本正则表达式 与 扩展正则表达式相差\符号
    • 匹配任意单个字符: .(与通配符有区别)
    • 字符字数匹配:
      • *:表示前面的字符任意次,.*表示任意长度的字符串
      • \?:表示前面的字符出现0次或者1次
      • \+:表示前面的字符出现至少一次
      • \{m\}:前面的字符出现m次
      • \{m,n\}:前面的字符出现至少m次,最多n次
      • \{m,\}:前面的字符至少出现m次
    • 字符位置锚定:
      • ^:行首锚定
      • $:行尾锚定
      • ^PATTERNS:行首出现正则匹配的锚定
      • \<或者\b:词首锚定
      • \>或者\b:词尾锚定
      • \<PATTERN>\:单词锚定
    • 分组:\(keyword\): 表示将一个或者多个字符捆绑在一起,当做一个整体进行处理
    • 后向引用:\1 从左起第一个\(到右侧第一个与之匹配的)\符号之间模式匹配到的字符(字符不是模式)
    • 或者关系:a\|b a或者b

    grep sed awk

    grep命令:文本搜索过滤工具,根据用户指定的"模式"对目标文本进行匹配检测,将匹配的行打印输出(检索工具)

    • 命令格式:grep [选项...] 模式 [文件名...]
    • 常用选项:
      • -e PATTERN1 -e PATTERN2 : 表示或者的关系
      • -w :按单词匹配 (数字、字母、“_”不是分割符,“-”是分割符)
      • -n :显示匹配的行号码
      • -v :显示没有匹配到的行
      • -o :只显示匹配到的行
      • -i :忽略匹配到的字符大小写
      • -ABC:显示匹配到的前后几行
      • -E : 扩展的正则表达式(= egrap)

    sed命令:一种在线行编辑器,每次处理一行并送入标准输出中(搜索匹配处理工具)

    • 命令格式:sed [选项...] “脚本” 输入文件...
    • 常用选项:
      • -r : 支持扩展的正则表达式
      • -e 脚本1 -e 脚本2:指定多脚本运行
      • -f 脚本 : 从指定文件中读取并运行脚本
      • -i.bak : 直接修改源文件,但是有备份
    • 脚本:由地址编辑命令两部分联合构成,没有分隔符,连起来写
    • 地址定界:
      • 省略地址:表示对全文进行处理
      • #:指定行号
      • $:最后一行
      • /regexp/:模式匹配到的行
      • #,/regexp/:从指定行到模式匹配的行
      • #1,#1:从指定行1到指定行2
      • /regexp1/,/regexp2/:从模式匹配的行1到模式匹配的行2
      • #,+n:从指定的行开始,到向下的第n行
      • 1~2:从1开始步进2
    • 编辑命令:
      • d : 删除模式空间中的行
      • p : 打印模式空间中的行
      • = : 为模式空间中的行打印行号
      • a [\]text:在行后添加内容(text中有空格的情况下使用\符号)可使用\n添加多行
      • w /path/to/somewhere:指定的内容另存到指定文件中
      • :模式空间中匹配行取反操作
      • s/old/new/替换标记 查找替换命令,分隔符无所谓 (这里可以使用后向引用操作 & \1)
        - g 全局替换
        - i 不匹配大小写
        注意: 在正则表达式中匹配的字符有通配符的作用,需要使用转义符。

    awk命令:报表生成器,格式化文本的输出

    • 命令格式:

      • awk [选项] 'program' file
      • awk [选项] 'BEGIN{action;...}pattern{action;...}END{action;...}' file
    • 常用选项:

      • -F :直接跟着分隔符号(省略的时候表示以空格为分割符号)
      • -v或者var=value:用来设置program中使用的参数
      • -f /path/from/awk-脚本 : 从脚本中载入
    • program的基本格式: pattern{action statement}

      • patten部分决定动作语句何时触发事件
      • action部分表示对数据的处理,放在{}内
    • pattern(正则表达式 && 判断)

      • 省略不写的情况: 匹配文件的所有行
      • /regexp/ : 处理匹配到的行
      • /reg1/,/reg2/ :不能直接使用数字来指定行数(可以使用NR变量构建关系表达式来指定行)
      • 关系表达式:
        • 算数操作符 (x+y, x-y, x*y, x/y, x^y, x%y)
        • 赋值操作符 (=, +=, -=, *=, /=, %=, ^=, ++, --)
        • 比较操作符 (==, !=, >, >=, <, <=)
        • 模式匹配符 (~ 左侧是否匹配包含右侧,!~ 左侧是否不匹配包含右侧)
        • 逻辑操作符 (与&&,或||,非!)
      • BEGIN(只在开始时执行一次) END(在文本结束时执行一次)
    • action

      • print : “,”隔开多个输出,打印默认空格是分隔符,使用“;”自定义分隔符 print $1 ";" $2
      • printf : 格式化输出命令 printf “格式1 格式2” ,变量1,变量2...
      • 条件表达式(三目表达式) 条件?符合时执行:不符合时执行
      • if(条件) {statement;...} [else{statement;...}]
      • [do{statement;...}]while(条件) {statement;...}
      • for(init;条件;变量修改){statement;...}
    • 内置变量

      • FS :(输入字段分隔符)用法-v FS=";",功能与-F选项完全一致,但是可以在program中使用
      • OFS:(输出字段分隔符)用法-v OFS="%", 默认情况下是空格
      • RS :(输入记录分隔符,指定输入时的换行符)用法-v RS=" " , 按照设定将输入数据划分成记录段
      • ORS:(输出记录分隔符,指定输出时的换行符)用法-v ORS=" " ,按照设定将输出时的换行符替换
      • NF :(字段数量)
      • NR :(记录号)
      • FNR:(在处理多文件的情况下,对每个文件的记录号分别计数)
      • FILENAME : (当前的文件名)
      • ARGC :(命令行参数个数) 包括awk自身
      • ARGV :(命令行参数矩阵)
    • awk数组:

      • name[$i]++ 的主要功能是将每一行的第一个字段作为索引信息,然后++完成次数的统计
      • for(var in name){print var, name[var]}
    • awk函数

      • srand():随机数函数种子
      • rand():随机数生成
      • sub(r,s,[t]) :对字符串t搜索r表示的模式匹配的内容,并将第一个匹配到的内容替换成s
      • gsub(r,s,[t]):对字符串t搜索r表示的模式匹配的内容,并将所有匹配到的内容替换成s
      • split(s,array,[t]):以t为分隔符切割字符串s,逐个放入到array数组中,索引值依次为1,2,3...
      • length() 输出字符串的长度

    相关文章

      网友评论

          本文标题:CentOS 文本处理

          本文链接:https://www.haomeiwen.com/subject/kukmqftx.html