基础正则表达式
^word :
意义:待查找的字符串(word)在行首
范例:查找行首为#的那一行,并列出行号
$grep -n '^#' filename
word$ :
意义:待查找的字符串(word)在行末
范例:查找行首为!的那一行,并列出行号
$grep -n '!$' filename
. :
意义:代表一定有一个任意字符的字符
范例:查找的字符可以是(eve)(eae)(eee)(ee),但不能仅有(ee)!即e与e之间一定仅有一个字符,有空格符也是字符。
$grep -n 'e.e‘ filename
\ :
意义:转义字符,将特殊符号的特殊意义去掉
范例:查找含有单引号的那一行
$grep -n \' filename
* :
意义:重复零个到无穷多个的前一个字符
范例:找出含有(es)(ess)(esss)等的字符串,注意,因为*可以是0个,所以(es)也是符合待查找字符串。另外,因为*为重复“前一个RE字符”的符号,因此,在*之前必须紧接着一个RE字符。例如任意字符为“.*”
$grep -n 'ess*' filename
[n1-n2] :
意义:从字符集合的RE字符里面找出想要选取的字符
范例:查找含有任意数字的一行,需特别注意,在字符集合[]中的减号“-”是有特殊意义的。它代表两个字符间的所有连续字符。但这个连续字符和ASC||有关,因此,你的编码需要设置正确(在bash中,需要确定LANG和LANGGUAGE的变量是否正确)例如所有大写字母为[A-Z]
$grep -n '[0-9]‘ filename
[list] :
意义:从字符集合的RE字符里面找出想要选取的字符
范例:超找含有(gl)或(gd)的那一行,注意!在[]当中代表一个待查找的字符,例如“a[afl]y”代表查找的字符串可以是aay,afy, aly即[afl]代表a或f或l的意思。
$grep -n 'g[ld]‘ filename
[n1-n2] :
意义:从字符集合的RE字符里面找出想要选取的字符范围
范例:查找含有任意数字的那一行
root# grep -n '[0-9]' regular_expression.txt
在字符集合[]中“-”是有特殊意义的,代表两个字符之间的所有连续字符,但这个连续与否与ASC编码有关,编码需要设置正确(在bash中,需要确定LANG与LANGUAGE的变量是否正确)例如所有大写英文字符[A-Z]
[^list] :
意义:从字符集合的RE字符里面找出不要的字符串或范围
从regular_exp.txt 中找出含‘oo’但不能含有‘oot’的数据
root#grep -n 'oo[^t]' regular_exp.txt
\{n, m\}
意义:连续n到m个的前一个RE字符,\{n\}表示连续n个的前一个的RE字符,\{n,\}表示连续n个以上的前一个RE字符
范例:在g与g之间有2个到3个的o存在的字符串
root# grep -n 'go\{2,3\}g' regular_exp.txt
sed 工具
root# sed [-nefr] 'n1,n2 function'
-n:使用安静模式(silent), 默认情况下,所有来自stdin的数据一般都会被列出在屏幕上,
加上-n参数后,只有经过sed特殊处理的那一行(或者操作)才会被列出来
-e:直接在命令模式上进行sed的动作编辑;
-f:直接将sed的动作写在一个文件内
-r:sed的动作支持扩展正则表达式(默认支持基础正则表达式)
-i:直接修改读取的文件内容,而不是由屏幕输出
'n1,n2 function':
n1, n2 可选,一般表示选择进行动作的行数
function:
a:新增, a的后面可以接字符串string, string会在新的一行出现(当前行的下一行)
c:替换,c的后面可接字符串string,string可以替换n1,n2之间的行
d:删除,
i:插入,后可接字符串string,string出现在新的一行里(当前行的上一行)
p:打印,将选择的数据打印出来
s:替换,可以搭配正则表达式 s/old_string/new_string/g
扩展正则表达式
+
意义:重复一个或一个以上的RE字符
范例:查找(god)(good)(goood)等的字符串
root#egrep -n 'go+d' regular_exp.txt
?
意义:零个或一个的前一个RE字符
范例:查找(gd)(god)这两个字符串
root#egrep -n ‘go?d’ regular_exp.txt
|
意义:用或(or)的方式找出数个字符串
范例:查找gd或good这两个字符串
root#: egrep -n 'gd|good' regular_exp.txt
()
意义:查找”组“字符串
范例:查找(glad)或(good)
root#egrep -n 'g(la|oo)d' regular_exp.txt
()+
意义:多个重复组的判别
范例:查找‘AxyzxyzxyzxyzxyzC'
root#egrep -n 'A(xyz)+C'
格式化打印 printf
root#printf '打印格式' 实际内容
%ns n是数字, s代表string, 即多少个字符
%ni n是数字, i代表integer, 即多少个整数字符
%N.nf f代表floating,假设我共要10个位数,小数点后有两位。即为%10.2f
awk
root#awk '条件类型1{动作1} 条件类型2{动作2}.......' filename
awk读入一行数据后,$0代表一整行数据,$1代表第一列,$2代表第二列......
NF:每一行($0)拥有的字段总数
NR:目前awk所处理的的”第几行“数据
FS:目前的分割字符,默认是空格键
逻辑运算符:
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于
预先设置awk的变量,使用BEGIN(这样新设置过的变量在第一行就起作用)
root#awk 'BEGIN {FS=":"}'
所有awk的动作(在{}中的动作),可以利用分号“;”间隔,或者直接以[enter]按键来分割
在awk当中,变量可以直接使用,不用加上$符号
文件比较工具
root#diff [-bBi] from-file to-file
from-file:欲比较文件名
to-file: 目的比较文件的文件名
-b:忽略一行当中多个空白的区别
-B:忽略空白行的区别
-i:忽略大小写的区别
diff以行为单位进行比较,cmp命令以字节单位进行比较
root# cmp [-s] file1 file2
-s: 将所有不同点的字节处都列出来。(cmp默认只输出第一个)
阅读(342) | 评论(0) | 转发(0) |