美文网首页
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