Linux基础八之文本处理

tac #全文倒序
rev #同行倒序

cat 
-E:显示行结束符$
-n:对显示出的每一行进行编号
-A:显示所有控制符
-b:非空行编号
-s:压缩连续的空行成一行


nl 类似 cat -b


less        #可以 /搜索内容

cut  #按列抽取文本
 -c #按字符切割
语法:cut -d" " #分隔符: -fn #第n字段1,3- #行范围1,3到底  filename
举例:ifconfig eth0 | head -2 | tail -1 |tr -s “” |cut -d“ ” -f3


paste #合并两个文件同行号的列到一行
-s : 所有行合成一行显示


wc #统计文本数据
-l #只计数行数
-w #只计数单词总数
-c #只计数字节总数
-m #只计数字符总数
-L #显示文件中最长行的长度


sort #文本排序


uniq #从输入中删除前后相接的重复的行
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行


diff #比较两个文件之间的区别
patch 复制在其它文件中进行的改变(要谨慎使用)
适用 -b 选项来自动备份改变了的文件
 

Linux文本处理三剑客
grep:文本过滤(模式:pattern)工具,注意是包含关系
grep, egrep, fgrep(不支持正则表达式搜索)
sed:stream editor,文本编辑工具
awk:Linux上的实现gawk,文本报告生成器

正则表达式PCRE(Perl Compatible Regular Expressions)
grep,sed,awk,vim, less,nginx,varnish
分两类:
基本正则表达式:BRE
扩展正则表达式:ERE
元字符分类:字符匹配、匹配次数、位置锚定、分组
字符匹配:
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符,排除
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字 [:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
匹配次数
* 匹配前面的字符任意次,包括0次
贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
\?  #字符0或1次,可有可无
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次
位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定,用于单词模式的右侧
\<PATTERN\> 匹配整个单词

分组:\(\) 将一个或多个字符捆绑在一起,当作一个整体处理
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些
变量的命名方式为: \1, \2, \3, ...
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
示例: \(string1\+\(string2\)*\)
\1 :string1\+\(string2\)*
\2 :string2
或者:\|
示例:a\|b: a或b C\|cat: C或cat \(C\|c\)at:Cat或cat

扩展的正则表达式
egrep = grep -E

sed

包含grep,自动打印,显示不编辑
sed 'script:位置+命令' inputfile
位置:
可单行,n指定行, $最后一行,//匹配的每一行
也可范围行,n,n,n,+n,//,//,n,//
~步进,1~2奇数行,2~2偶数行
命令:
d删除,p复制,a后行追加,i前行追加,c替换,w另存为,r写入文件内容,=行号,!取反

s/// 查找替换,也可用@#,g全局,w另存为,&代表搜索的内容

-n 关闭自动打印,多配合p命令使用,显示匹配的行
-e 支持多命令。多点编辑 
-i  编辑保存,记得先备份i.bak
-r 支持扩展
高级编辑命令
P:打印模式空间开始到\n内容,并追加到默认输出之前
h:把模式空间中的内容覆盖到保持空间中
H:把模式空间中的内容追加到保持空间中
g:从保持空间取出数据覆盖到模式空间
G:从保持空间取出数据追加到模式空间
x:把模式空间的内容与保持空间的进行交换
n:读取匹配到的行的下一行覆盖到模式空间
N:读取匹配到的行的下一行追加到模式空间
d:删除模式空间中的行

awk,报告生成器,格式化文本输出
nawk
gawk:模式扫描和处理语言
-F “分隔符” 指明输入时用到的字段分隔符
-v var=value 变量赋值
-f  引用文件

基本格式:awk [options] 'program' file…
Program:pattern{action statements;..}
pattern和action
pattern部分决定动作语句何时触发及触发事件
BEGIN,END
action statements对数据进行处理,放在{}内指明print, printf
awk 程序可由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块,共3部分组成

分割符、域和记录
• awk执行时,由分隔符分隔的字段(域)标记$1,$2...$n称为域标识。$0为所有域
• 文件的每一行称为记录
省略action,则默认执行 print $0 的操作

字符串要带双引号,否则当变量
"\t" tab分割

变量:内置和自定义变量
FS:输入字段分隔符,默认为空白字符
awk -v FS=':'   ,   awk –F: 
OFS:输出字段分隔符,默认为空白字符
RS:输入记录分隔符,指定输入时的换行符
RS:输入记录分隔符,指定输入时的换行符
NF:字段数量,引用变量时,变量前不需加$
NR:记录号,行号

FNR:各文件分别计数,记录号
FILENAME:当前文件名
ARGC:命令行参数的个数
ARGV:数组,保存的是命令行所给定的各参数,ARGV[0]为awk

自定义变量(区分字符大小写)
(1) -v var=value
(2) 在program中直接定义

printf命令
格式化输出:printf “FORMAT”, item1, item2, ...
(1) 必须指定FORMAT
(2) 不会自动换行,需要显式给出换行控制符,\n
(3) FORMAT中需要分别为后面每个item指定格式符
格式符:与item一一对应
%c:显示字符的ASCII码
%d, %i:显示十进制整数
%e, %E:显示科学计数法数值
%f:显示为浮点数
%g, %G:以科学计数法或浮点形式显示数值
%s:显示字符串
%u:无符号整数
%%:显示%自身
修饰符
#[.#] 第一个数字控制显示的宽度;第二个#表示小数点后精度,%3.1f 不四舍五入
- 左对齐(默认右对齐) %-15s
+ 显示数值的正负符号 %+d

算术操作符,字符串操作,赋值操作符=, +=, -=, *=, /=, %=, ^=,++, --,比较操作符,
模式匹配符:~:左边是否和右边匹配,包含
逻辑操作符:与&&,或||,非!,
条件表达式(三目表达式)条件?真:假

PATTERN:根据pattern条件,过滤匹配的行,再做处理
(1)如果未指定:空模式,匹配每一行
(2)仅处理能够模式匹配到的行,需要用/ /
(3)关系表达式,结果为“真”才会被处理
真:非0,非空
假:“0”
seq 10 |awk ‘i=!i’ #取奇
(4)行范围 ,NR行号,//,//
(5) BEGIN/END模式

常用的action分类
• (1) Expressions:算术,比较表达式等
• (2) Control statements:if, while等
• (3) Compound statements:组合语句
• (4) input statements
• (5) output statements:print等

sed可编辑,awk不行
NR行数,NF字段数

awk控制语句
if-else,对awk取得的整行或某个字段做条件判断。
while,对一行内的多个字段逐一类似处理时使用,对数组中的各元素逐一处理时使用
do-while,无论真假,至少执行一次循环体
for循环,能够遍历数组中的元素
switch语句
break,终止循环
continue,跳过此次循环
next:提前结束对本行处理而直接进入下一行处理

awk数组,关联数组,可使用任意字符串;字符串要使用双引号括起来
若要遍历数组中的每个元素,要使用for循环
for(var in array) {for-body}
awk函数
数值处理:
rand():返回0和1之间一个随机数,配合srand()使用
字符串处理:
• length([s]):返回指定字符串的长度
• sub(r,s,[t]):对t字符串搜索r表示模式匹配的内容,并将第一个匹配内容替换为s,gsub全局替换
• split(s,array,[r]):以r为分隔符,切割字符串s,并将切割后的结果保存至array所
表示的数组中,第一个索引值为1,第二个索引值为2,…
自定义函数格式:
function name ( parameter, parameter, ... ) {
statements
return expression
也可将awk程序写成脚本,直接调用或执行
#!/bin/awk –f

system:awk中调用shell命令
awk 'BEGIN{system("hostname") }'

学习借鉴:

不可错过的文本处理工具:sed和awk - 掘金

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值