您的位置:首页 > 运维架构 > Linux

Linux 正则表达式与文件处理

2017-05-15 14:31 211 查看

grep

grep [-acinv] [--color=auto] '查找字符串' filename


参数:

- -a:将binary文件以text文件的方式查找数据

- -c:计算找到‘查找字符串’的次数

- -i:忽略大小写

- -n:顺便输出行号

- -v:反向选择,即显示出没有‘查找字符串’内容的那一行

- –color=auto:将找到的关键字部分加上颜色显示

‘查找字符串’

- 查找特定字符串

- 利用中括号[]来查找集合字符

- 行首与行尾字符^$

- 任意一个字符.与重复字符*

- 限定连续RE字符范围{}

特殊符号代表意义
[:alnum:]代表英文大小写字符及数字,即0-9,A-Z,a-z
[:alpha:]代表任何英文大小写字符,即A-Z,a-z
[:blank:]代表空格键与[tab]键
[:cntrl:]代表键盘上面的控制按键,包括CR,LF,Tab,Del等
[:digit:]代表数字,0-9
[:graph:]除了空格符(空格和[tab])外的所有其他按键
[:lower:]小写字符,a-z
[:print:]代表任何可以被打印出来的字符
[:punct:]代表标点符号,即” ’ ? ! ; : # $
[:upper:]代表大写字符 A-Z
[:space:]代表任何会产生空白的字符,包括空格符 [Tab] CR等
[:xdigit:]代表十六进制的数字类型,因此包括0-9,A-F,a-f的数字与字符

RE字符意义
^word待查找的字符串(word)在行首
word$待查找的字符串(word)在行尾
.代表一定有一个任意的字符
\转移字符
*重复零个到无穷多个的前一个字符
[list]从字符集合的RE字符里面找出想要选取的字符
[n1-n2]从字符集合的RE字符里面找出想要选取的字符范围
[^list]从字符集合的RE字符里面找出不要的字符串或范围
\{n,m\}连续n到m个的前一个RE字符,若为\{n\}则是连续n个的前一个RE字符,若为\{n,\}则是连续n个以上的前一个RE字符

扩展正则表达式
egrep
or
grep -E

RE字符意义
+重复一个或一个以上的前一个RE字符
?零个或一个的前一个RE字符
|用 或 的方式找出数个字符串
()找出“组”字符串
()+多个重复组的判别

sed

可以将数据进行替换、删除、新增、选取特定行等功能。

搭配
cat
和管道处理文本文件


sed [-nefr] [动作]


参数

- -n:使用安静模式

- -e:直接在命令行模式上进行sed的动作编辑

- -f:直接将sed的动作写在一个文件内,
-f filename
则可以执行filename内的sed动作

- -r:sed的动作支持的是扩展型正则表达式的语法(默认是基础正则表达式语法)

- -i:直接修改读取文件内容,而不是由屏幕输出。

动作说明:
[n1 [,n2]] function


例如动作需要在10行到20行之间进行,则“10,20[动作行为]”

function参数:

- a: 新增,a的后面可以接字符串,这些字符串会在目前的一行出现

- c:替换,c的后面接字符串,替换n1,n2之间的行!

- d: 删除

- i: 插入,i的后面接字符串,会在目前的一行出现

- p: 打印,将某个选择的数据打印出来,通常配合参数sed -n使用

- s: 替换,可以直接进行替换的工作,通常这个s的动作可以搭配!!

部分数据的查找并替换的功能

sed 's/要被替换的字符串/新的字符串/g'


awk

awk也是一个好用的数据处理工具。相比于sed常常用作于一整行的处理,awk则比较倾向于将一行分成数个“字段”来处理。因此,awk相当适合处理小型的数据!

awk '条件类型1{动作1} 条件类型2{动作2}...' filename


例子:
last -n 5 | awk '{print $1 "\t" $3}'


流程:

- 读入第一行,并将第一行的数据填入0(代表一整行数据)、1(第一列)、$2等变量中;

- 依据条件类型的限制,判断是否需要进行后面的动作

- 做完所有的动作与条件类型

- 若还有后续的“行”的数据,则重复上面1-3的步骤,直到所有的数据都读完为止。

awk以行为一次处理的单位,以字段为最小处理单位。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 正则表达式