linux文本处理

一、grep
1、说明:
grep用于从文本中匹配正则表达式,并将所有匹配的行输出。grep支持正则表达式和它的扩展集。它有三种变形:
egrep:扩展grep,支持基本及扩展的正则表达式,不支持\q模式范围的应用。
fgrep:快速grep,允许查找字符串而不是一个模式,实际上它与grep速度相当。

2、grep的原理
grep从文件或者管道中一行一行的读取内容,每读一行就进行一次正则匹配,如果匹配成功,则进行输出。

3、grep的选项
-c:只输出匹配行的计数
-i:不区分大小写(只用于单字符)
-h:查询多个文件时不显示文件名
-l:查询多个文件时只输出匹配字符的文件名
-n:显示匹配行及行号
-s:不显示不存在或无匹配文件的错误信息
-v:显示不匹配文本的所有行。

二、awk
1、说明:
awk用于格式化报文或从文件中抽取数据包,它的基本功能是在文件或字符串中基于指定规则流览和抽取信息。在文本流览和数据使用上性能优异。它以发展这种语言的人Aho.Weninberger和Kernigham命名,另外还有nawk和gawk,它们扩展了文本特性。

2、awk的工作原理:
A、awk将一行作为一条记录,以分隔符将一条记录分为不同的域,分别以$1,$2,$3……来标识,$0代表所有域。 大于域数的$n表示增加的新域,相当于一个新增的变量。
B、awk从执行开始,启动读命令,然后以分隔符分隔出不同的域,直到找到"\n",认为一个记录结束,根据模式匹配对此记录进行处理,然后开始一个新记录再启动读命令,直至文件结尾

3、awk的 三种使用方式:
A、直接命令行调用,语法格式为awk [-F field-separator] 'commands' input-file(s),其中:
-F:指定处理文件的域分隔符,默认为空格;
commands:对文件的每一条记录执行的命令;
input-file(s):要处理的文件。
说明: awk命令由模式和动作两部分组成:
模式部分决定动作语句何时触发,如果省略模式部分,动作将时刻保持运行状态。模式可以是任何条件语句或复合语句或正则表达式。它包含两个特殊字段BEGIN和END,BEGIN模式表示后面的动作只在awk开始执行时执行一次,通常用来设置计数和打印头。END 模式 表示后面的动作只在所有记录处理完成后执行一次,通常用来输出文本总数和结尾标志。
动作即对数据的操作,在大括号{}内指明,大多数用来打印,但还有些更长的代码诸如if和循环语句及循环退出结构。如果不指明动作,将打印输出所有记录。 注意 一个大括号代表一个动作,一个动作可以包含awk的多条 指令 语句,  指令 语句之间以分号分隔,if也是指令语句之一,需要说明的是在if之后,如果需要对条件成立的记录执行多条 指令 语句,则必须使用大括号将这些 指令 语句括起来,否则只会执行紧临的一条 指令 语句,其他 指令 语句则不在if条件内执行。动作和动作之间不需要分号分隔。
典型示例如下:
awk 'BEGIN {print "Here start"} { aa=$1;bb=$2;if (aa ~ /xx/) print aa }' aa.txt
B、使用unix命令解析器功能,将awk命令写到一个脚本文件里,脚本里面指定使用awk解析器解析脚本文件,即首行写成#!/bin/awk -f。
C、将awk命令写到文本文件,然后使用命令行调用awk,使用-f指定命令文件。如awk -f awk-command-file input-file(s)。

4、保存awk输出
A、重定向
B、tee命令,一方面输出到屏幕,另一方面保存到文件。

5、指定awk脚本的输入文件的方法
A、直接加文件名,如下:
xxx.awk aa.txt
B、重定向方法
xxx.awk < aa.txt
C、管道方法
aa.txt|xxx.awk

6、awk中的正则表达式
A、awk中的正则表达式用斜线括起来,如“/hello/"可以查找hello在文本中的出现情况。
B、元字符
\:转义
^:开头匹配
$:结尾匹配
.:任意字符
[]:匹配[]内的任意一个字符
|:匹配或关系字符,如/(aa|bb)/表示匹配aa或bb
():匹配并取出变量。
*:匹配前面一个字符的任意多个
+:匹配一个或多个字符,只在awk中使用
?:匹配模式出现频率,如/xy?z/匹配/xyz/或/yz/

7、条件操作符
<:小于
<=:小于等于
==:等于
!=:不等于
~:匹配
!~:不匹配
&&:and
||:or
!:求逆

8、内置变量
用来设置环境信息,这些变量值可以被改变。
ARGC:参数个数
ARGV:参数数组,访问时直接使用下标,如ARGV[0]
ENVIRON:系统环境变量,访问时直接指定变量名,如ENVIRON[“EDITOR”]
FILENAME:流览的文件名
FNR:目前操作的记录数,其值小于等于NR,如果处理多个文件,则每一新输入文件都会重置此变量
FS:设置域分隔符,等价于-F选项,可以直接赋值以改变分隔符,如FS=","
NF:流览记录的域个数,在读完一条记录后被设置
NR:已读的记录数
OFS:指定输出域分隔符
ORS:指定输出记录分隔符,可直接赋值,缺省为换行(\n)
RS:控制记录分隔符,缺省为换行(\n)。

9、操作符
赋值操作符:= += *= /= %= ^=
条件表达式操作符:?
逻辑操作符:|| && !
正则匹配操作符:~ !~(匹配和不匹配)
关系操作符:< <= == != >>
算术操作符:+ - * / % ^ ++ --

10、新增变量,直接使用变量名称即可,如:
awk '{(tot+=$1 )}; END {print "tot: " tot}'
注意:大括号内的指令代表所有动作,如果(tot+=$1)外面没有大括号,表示tot+=$1只是动作的一部分,需要在动作的最后加上默认动作,即输出所有记录。

11、内置函数
gsub(r,s):在整个$0中用s替代r。
gsub(r,s,t):在整个t中用s替代r(t可以是$x,即任意域,缺省为$0)。
index(s,t):返回t在s中的位置。
length(s):返回字符串s的长度。
match(s,r):返回s是否匹配r的字符串。
split(s,a,fs):将s以fs为分隔符划分,结果存在数组a里面,访问时可直接使用下标,如a[0]。
sprint(fmt,exp):返回经过fmt后的exp。
sub(r,s):在$0中用s替换第一个r。
substr(s,p):返回字符串s中从p开始的后缀部分。
substr(s,p,n):返回字符串s中从p开始长度为n的后缀。
字符串的一些特殊屏蔽符,\{:表示{,和动作的大括号区别;
\n:换行
\t:tab
\f:换页
\b:退格
\r:回车
\ddd:八进制的ASCII码。
\c:任意其他特殊字符,如\\表示斜线
printf:以格式化输出,语法:printf([格式控制符], 参数)。
其中格式控制符包含的修饰符有:-:左对齐
Width:域步长,0表示0步长
.prec:最大字符串长度或小数点右边的位数。
格式符包括:%c:ASCII码字符
%d:整数
%e:浮点数,用科学计数法表示
%f:浮点数,用小数表示
%g:由awk决定使用%e还是%f
%o:八进制
%s:字符串
%x:十六进制

三、sed
1、说明:
sed是一款非交互性的文本流编辑器,它编辑文件或标准输入导出的文本拷贝,标准输入包括键盘、文件重定向(或一个管道的文本)、字符串和变量。它和vim的区别在于vim是交互性的。sed所编辑的内容只是文件的一个拷贝,并不改变原始的输入文件,可以将编辑后的内容重定向到文件,或者按默认方式输出到屏幕。

2、sed的工作原理:
sed从文件中读取一行或者从标准输入中读取内容,保存到缓冲区,然后根据命令对内容进行编辑,直到内容结束。

3、sed的 三种 使用方式:
A、直接命令行调用,格式为sed [选项] commands input-file,其中commands是要执行的命令,commands需要加上单引号或双引号;input-file是要处理的文件。
B、使用unix命令解析器功能,将sed命令写到一个脚本文件里,脚本里面指定使用sed解析器解析脚本文件,即首行写成#!/bin/sed -f,然后在执行脚本时可以指定输入文件。执行方式如下:sed脚本   [选项] input-file
C、将sed命令写到文本文件,然后使用命令行调用sed,使用-f指定命令文件。如sed   [选项]  -f sed-command-file input-file。
说明:input-file如果不指定,sed从标准输入中接受内容,一般是键盘和重定向。
选项有:
n:不输出,缺省为输出所有行(包括编辑和未编辑行),p命令可以用来打印编辑行。
c:下一命令是编辑命令,使用多项编辑命令时加入此选项,如果只有一条命令,此选项无用。
f:说明脚本文件支持所有的sed命令。
典型示例如下:
e:添加扩展的命令执行,在sed执行多条命令时可以使用。

4、保存sed输出
A、重定向
B、tee命令,一方面输出到屏幕,另一方面保存到文件。

5、定位文本
由于sed是一个非交互的文本编辑器,需要通过行号或正则表达式指定要编辑的文本行。行号的指定方式如下:
x:直接指定行号,如1
x,y:指定行号范围,如1,3
x,y!:指定不包括x和y行
正则表达式的方式如下:
/pattern/:匹配正则表达式
/pattern/pattern/:查询包含两个模式的行,如/aa/bb/
也可以行号和正则表达式结合:
pattern/,x:
x,/pattern/:在指定行上匹配正则表达式

6、编辑命令
p:打印
=:打印行号
a\:定位行号后附加新文本信息
i\:定位行号后插入新文本信息
d:删除定位行
c\:用新文本替换定位文本
s:使用替换模式替换相应模式
r:从另一个文件中读文本
w:写文本到另外一个文件
q:第一个模式匹配完成后推出或立即推出
l:显示与八进制ACSII码等价的控制字符
{}:在定位行执行命令组
n:从另一个文件中读文本下一行并附加在下一行
g:将模式2粘帖到/pattern n/
y:传送字符
n:延续到下一输入行;允许跨行的模式匹配语句。

7、元字符
$:代表结尾行。如果要以文本进行匹配,需要加转义符。
正则表达式元字符均为元字符。

8、示例
sed -n -e '/music/p' -e '/music/=' aa.txt
sed -n '10,23p;24q' file.log >10-20.log
sed -n '10,23{=;p;};24q' file.log >10-20.log
sed -n '10,23{=;p;};24q' file.log |sed 'N;s/\n/ /' >10-20.log
四、sort
1、说明
sort用来将文本内容进行排序

2、命令格式
sort [选项] input-file

3、sort选项
-c:测试文本是否已经排序
-m:合并两个分类文件
-u:删除所有复制行
-o:保存sort结果的文件名
-b:使用域进行分类时,忽略第一个空格
-n:将指定的排序依据域按数值(将字符串转化成数值)进行分类
-t:指定域分隔符,默认是空格和tab
-r:逆向排序
+n n为域号,使用此域号开始进行分类
-n n为域号,在分类比较时忽略此域,一般与+n一起使用。
pos1 传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7个字符开始。
-k:指定分类键,从1开始。
+m.n以m域的第n个字符开始进行排序。

4、sort的域划分
sort域从0开始,依次上增,如1,2,……。如果不指定按照哪个域排序,则分别参照0,1,……各个域进行排序。

五、uniq
1、说明
用来从一个文本文件中去除或禁止重复行。
2、命令格式
uniq [选项] input-file [output-file]
2、选项
-u:只显示不重复行
-d:只显示有重复数据行,每种重复行只显示一行。
-c:打印每一重复行出现次数及内容
-fn:忽略前n个域

六、join
1、说明
将两个排序文件连在一起。使用时域要小于20。join的结果和数据库join相同。默认使用域1进行连接,输出时默认输出连接成功行的所有域

2、语法
join [options] file1 file2

3、选项参数说明
-an:n表示显示第n个文件中不匹配的行。
-o m.n:表示指定连接后的显示域,m表示文件号,n表示域号,如-o 1.1, 2.2显示连接后文件1的第1个域和第2个文件的第2个域。
-jm n:指定连接使用的域,如-j1 3 -j2 2表示使用文件1的第3个域和第2个文件的的第2个域进行连接。

七、cut
1、说明
从文本文件或标准输入剪切列或域。输出结果是剪切到的内容。

2、语法
cut [options] file1 file2

3、选项参数说明
-c list:指定剪切字符 范围 ,如-c1,5-7表示剪切第1个字符和第5到7个字符。
-f field:指定剪切域数,如-f1,5-10表示剪切第1个域和第5到10个域。注意域从1开始。
-d:指定域分隔符

八、paste
1、说明
将两个文件粘帖成一个文件
2、语法
paste [选项] file1 file2
3、选项和参数说明
-d:指定合并后的域分隔符。如:file1的内容为两行,分别为name1,name2;file2的内容为两行,分别为hello1,hello2;默认合并后为:name1 hello1
       name2 hello2
如果使用paste -d: file1 file2,则结果为:
       name1:hello1
       name2:hello2
-s:将两个文件合并成行,而不是按行粘帖,如上例使用paste -s file1 file2合并后的内容为
name1 name2
hello1 hello2
-:从标准输入读数据时以几列显示,如ls|paste -d" " - - - -。表示以4列显示ls的结果。

九、split
1、说明
用来将大文件按行分隔成小文件

2、用法
split -n input-filename [output-filename]

3、参数说明
-n表示按多少行一个文件进行分隔。
输出文件名如果没有指定则按照x[aa]到x[zz]的方式生成,x为首字母,后面分别是aa、ab、……、zz。

十、tr
1、说明
用于从标准输入或文件中通过替换或删除操作进行字符转换。常用于删除文件中控制字符或进行字符转换。

2、语法
tr [options] ["string1-to-translate-from"] ["string2-to-translate-to"] file

3、选项参数说明
-c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符
串。
Input-file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。
使用tr时,可以指定字符串列表或范围作为形成字符串的模式。这看起来很像正则表达式,
但实际上不是。指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。
[a-z] a-z内的字符组成的字符串。
[A-Z] A-Z内的字符组成的字符串。
[0-9] 数字串。
/octal 一个三位的八进制数,对应有效的ASCII字符。
[O*n] 表示字符O重复出现指定次数n。因此[O*2]匹配O O的字符串。
大部分tr变种支持字符类和速记控制字符。字符类格式为[:class],包含数字、希腊字母、空行、小写、大写、cntrl键、空格、点记符、图形等等。当用一个单字符替换一个字符串或字符范围时,注意字符并不放在方括号里([])。一些系统也可以使用方括号,例如可以写成[“\012”]或“\012”,tr也允许不加引号,因此命令中看到单引号而不是双引号时也不要感到奇怪。像大多数系统工具一样, tr也受特定字符的影响。因此如果要匹配这些字符,需使用反斜线屏蔽其特殊含义。例如,用\ {指定花括号左边可以屏蔽其特殊含义。
速记符:
\a:Ctrl-G铃声 ASCII码\007
\b Ctrl-H 退格符\010
\f Ctrl-L 走行换页\014
\n Ctrl-J 新行\012
\r Ctrl-M 回车\015
\t Ctrl-I tab键\011
\v Ctrl-X \030
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值