正则表达式
grep
grep 关键字 文件
grep -v 关键字 文件 #取反,不带关键字
grep -i 关键字 文件 #不区分大小写
grep -o 关键字 文件 #只显示关键字
grep -on 关键字 文件 #只显示关键字,显示行号
grep -n 关键字 文件 #显示行号,还有一整行
gre -E 正则表达式 文件 == egerp 正则表达式 文件
[09] 只有09
grep '^[^a-zA-Z]' 注意二者区别
grep '[^a-zA-Z]'
正则表达式
^ 匹配开头
$ 匹配结尾
[] 匹配范围 #[0-9][A-Z][a-z]
[^0-9] #所有非数字 ,^表示取反
[a-z][0-9]* 0个或多个小写
[a-z]+ 前面的字母出现一次或多次
egrep 'o+' 文件
[a-z]? 前面的字母出现0次或一次
r.o #r与o之间任意一个字符
.* #任意一个字符出现多次
grep 'o\{2\}' 文件 指定过滤出的字符的出现次数
[a-z0-9A-Z]+@[a-z0-9A-Z]+\.[a-z0-9A-Z]* 邮箱匹配
sed
格式:sed -n ‘n’p 文件
选项与参数:
-n 使用安静模式
-e 直接在命令
-f 将sed动作写到文件内
-r sed的动作 支持的是
-i 直接修改
动作:
a:新增 a的后面可以接字符串,而这些字串会在新的一行出现
c:取代 c的后面可以接字符串,这些字符串可以取代n1,n2之间的行
d:删除
sed ‘3d’ file #删除第三行
sed ‘1,3d’ file #删除,1-三行
sed ‘1d;3d;5d’ file #删除第一行第三行第五行
sed ‘/^$/d’ #删除空行
sed ‘/abc/d’ #删除所有包含abc的行
sed ‘/abc/,/def/d’ 删除包含abc和def的行,包括其自身
sed ‘1,/def/d’ #删除第一行到def的行,包括其自身的行
sed ‘/abc/,+3d’ #删除含有abc的行之后再删三行
sed ‘/abc/~3d’ #从含有abc的行开始,总共删除三行
sed ‘1~2d’ #从第一行开始,每两行删除一行,删除奇数行
sed ‘2~2d’ #从第2行开始,每两行删除一行,删除偶数行
sed ‘$d’ #删除最后一行
sed ‘/dd|cc/d’ #删除带有cc或者dd的行
i:插入 i的后面可以接字符串,这些字符串会在上一行出现
s 替换 可以直接进行取代,s经常匹配正则模式
sed 's/[0-9]//g' 文件
g代表全局 ,如何删除文档中的数字
sed 's#[0-9]##g' 文件
g代表全局 ,如何删除文档中的数字 /可以用#或者@代替
sed 's/[a-zA-Z]//g' 文件
如何删除文档中的字母
打印某行
- 打印所有行
sed -n '1,$'p 文件
- 区间打印
sed -n '1,5'p 文件
打印包含某个字符串的行
- -e选项实现多个行为
删除某些行
sed '1'd 文件
sed '1,3'd 文件
sed '2d;4d' 文件
sed '/root/'d 文件
- 替换字符或者字符串
- 调换两个字符串的位置
- 直接修改文件的内容
awk
以空格为默认分隔符将每行切片,切开的部分在进行分析处理
-F 是指定分隔符,如果不加-F选项,则以空格或tab为分隔符
$1是第一个字段
$2是第2个字段
$0是整行
print可以打印自定义的内容,但是自定义的内容要用双引号括起来
head -n5 /etc/passwd | awk -F ':' '{print $1" "$2}'
#commands是真正的awk命令,-F是可选的。input-file(s)是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项成为一个域,通常,在不指定-F或分隔符的情况下,默认分隔符是空格
#awk工作流程
#读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域
$0则表示所有域,$n代表第几个域
awk常用内置变量
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数,常用(即行号)
FS 设置输入域分隔符,等价于命令行-F选项,常用
NF 浏览记录的域的个数,常用,就是列数
NR 已读的记录数,常用(与FNR比较)
OFS 输出域分隔符,常用
ORS 输出记录分隔符,常用
RS 控制记录分隔符