网页游戏九游 -

2021-04-02由程序员日记发表于系统教程 浏览37次

目录

这篇文章讲一下常用的文本分析命令,相信我,是否有用.

awk命令

  • linux中处理文本文件的一个应用程序
  • awk 动作 文件名
  • awk会把文件逐行读入,(空格,制表符)为默认分隔符,将每一行分成若干字段 ,用 $n 表示第n个字段
  • awk强大在可以用其对数据分析并生成报告.
  • awk -F '' '{pattern+action}' filenames
awk的一般格式如下
awk -F ‘:’ ‘BEGIN{…}{}END{}’ filename
其中 -F指定分隔符,BEGIN中的内容开始执行一次,END中的内容结束执行一次,中间{}中的内容每行执行一次。

功能支持

  • 支持自定义列分隔符 -F ‘分隔符’ awk -F ‘:’ demo.txt 以 : 为列分隔符进行输出
  • 支持正则表达式匹配
  • 支持自定义变量,数组 a[1], a[key]
  • 支持内置变量
NF 分割后列的个数
NR 行号
$n $0为整个列,$n输出该行第n列
**OFS 可以定义输出时列的分隔符
ORS 可以定义输出时行的分隔符**
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
ARGC 命令行参数个数
ARGV 命令行参数排列
  • 支持函数

    • print print $1 "," $2
    • split split(被分割变量,存入的变量,分割符)
    • substr
    • sub
    • gsub
  • 支持流程控制语句,类C语言

    • if, while , do/while, for/in, break, continue
  • 支持将逻辑代码写入文件中去

    • awk -f awk.sh demo.txt
    • awk.sh 中排版需要严格排,跟golang语法很像

grep

  • grep是按行匹配的文本工具,输出匹配行的内容
  • grep -[参] 内容 demo.txt

常用参数

  • -o 仅显示匹配到的字符串
  • -v 取反 , 打印出不匹配的相关内容
  • -i 忽略大小写
  • -n 显示匹配的行号
  • -c 输出匹配的行数 相当于wc -l
  • -A1 after 显示匹配行以及它的后1行
  • -B1 before 显示匹配行以及它的前1行
  • -C1 context 显示匹配行以及它的前后各1行
  • -e 或的关系,可以-e [1] -e [2]匹配包含1或者包含2的内容
  • -w 以单词的形式匹配关键字(前后为符号或者空格为单词)

正则表达式简单入门

包括grep等其他编程时都需要用到正则表达式
(regex101.com)[在线测试正则表达式网址]

限定符

  • ? 表示前一个字符出现0次或者1次 used?=>use和used
  • *表示前一个字符出现0次或者n次
  • +表示前一个字符出现1次以上
  • a{6} {2,6} {2,} 分别表示a出现6次/2-6次/2次以上
  • ()可以用来将多个字符扩起来来匹配后面的限定符
  • |表示或 ,使用的时候记得加 ()
  • []表示字符类,[abc]+ 表示只有abc构成的单词 [a-zA-Z]表示所有英文字母
  • [^]表示非 ,[^0-9]代表不包含数字的
  • 元字符 \d 数字字符 \w英文(单词)字符 \s空白符
  • \D代表非数字字符 \W非英文字符 \S非空白符
  • \b来表示边界的意思.
  • .代表除换行符外的任意字符
  • ^会匹配行首 ^a a开头 $会匹配行尾 a$ 以a结尾
  • 当需要匹配.或者*等这些特殊字符时,可以使用\.和\*
正则表达式在范围匹配时(*+{}) 默认为贪婪匹配(匹配尽可能多的内容)
当我们只想要匹配满足条件的最小单元时,可以在后面加个?开启懒惰匹配
比如用<.+>来匹配html标签时,会匹配整段html代码,而我们只想匹配html标签 可以使用 <.+?>来达成这一效果