Linux 正则与文本操作指令

一、正则

  1. 基础正则表示法
符号 含义
[] 有一个的意思,[abc]表示有a或b或c中一个
[^] 反向选择,不包含
[a-z] -,指连续的a至z 26个字母
^ 行首
$ 行尾
转义字符,跳脱字符
^$ 空白行
. 一个字符占位
* 重复前一字符0至多个
{n,m} 搜寻包含前一字符n至m个的字符串
  1. 延伸正则表示法
符号 含义
+ 一个或一个以上的前一个RE字符
? 零个或一个前一个RE字符
| 同时用(or)的方式查找多个字符串
() 包含。
()+ 字符串拼接

二、文本操作指令

  1. cut
  • cut 以行为单位进行操作
关键字 操作
-d 后面接分隔字符。与 -f 一起使用;
-f 依据 -d 的分隔字符将一段讯息分区成为数段,用 -f 取出第几段的意思;
-c 以字符 (characters) 的单位取出固定字符区间
  1. tee
  • 双向输出重定向,可以stdin输出到屏幕与文件
选项 解释
-a 以累加 (append) 的方式,将数据加入 file 当中
  1. sed
  • sed本身也是一个管线命令,以行为单位进行操作
  • 可以分析stdin,能进行取代,删除,增加,撷取特定行
  • 当文本行数上百万时,可用-i 指令代替vim直接修改部分文本内容
关键字 操作
格式 sed [-nfer] 动作
-n 使用slient模式,只将sed特殊处理的那一行(或动作)列出
-f 将处理结果输出到文件,-f filename 则可以在文件内进行sed操作
-e 直接在指令模式上进行sed,超过一个动作时每个动作前都需要-e
-r sed的动作 支持延伸的正则表示法,默认是支持基础的正则
-i 直接修改读取的文本内容
动作 [n1[,n2]]function,动作用单引号包裹, n1,n2表示执行动作的行。(^行首$行尾)
a add,a 后接的字符串会在新的一行出现(当前行的下一行)
i insert,i 后接的字符串会在新的一行出现(当前行的上一行)
d delete,删除
s substitute,取代,语法同vim(s/目标字段/取代内容/g,可结合正则语法)
p print,打印,常同-n 一起使用
  1. printf 格式化输出
关键字 含义
语法 printf '指定输出格式' 实际内容
a 警告声音输出
 退格键(backspace)
f 清除屏幕(form feed)
换行输出
即Enter键
水平的tab按键
v 垂直的tab按键
xNN 将数字转换为字符,NN为两位数的数字
%ns C语言中,n为数字,s代表字符串
%ni C语言中,n为数字,i代表integer,整数,
%N.nf C语言中,总共有N位,其中小数点后有n个数字
  1. awk 增强版cut
  • 语法: awk '条件1{动作1} 条件2{动作2}...' filename
  • 以行为一次处理单位
  • 以行内字段为最小的处理单位
  • 默认段之间是用空格或tab隔开的
  • $n,n 为数字,代表行内第几个字段。$1/$2第一/二个字段
关键字 含义
条件 满足条件才会执行动作
filename 需要处理的文件名
stdout awk也可读取前一个指令的sdtout
指令间隔 有多个动作时,每个{}内的操作用; 或Enter隔开
awk变量 含义
NF 每一行拥有的字段总数,即多少个$
NR 目前awk所处理的是第几行
FS 目前段之间分隔字符,默认是空格,手动指定FS=':'
"常量" awk语句中常量用双引号包裹
原文地址:https://www.cnblogs.com/luckyCoder/p/12732706.html