Linux三剑客grep、sed、awk(上篇)

grep

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global
Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

1.grep的主要参数

-a或–text 不要忽略二进制的数据。

-A<显示列数>或–after-context=<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之后的内容。

-b或–byte-offset 在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号。

-B<显示列数>或–before-context=<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前的内容。

-c或–count 计算符合范本样式的列数。

-C<显示列数>或–context=<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。

-d<进行动作>或–directories=<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。

-e<范本样式>或–regexp=<范本样式> 指定字符串做为查找文件内容的范本样式。

-E或–extended-regexp 将范本样式为延伸的普通表示法来使用。

-f<范本文件>或–file=<范本文件> 指定范本文件,其内容含有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每列一个范本样式。

-F或–fixed-regexp 将范本样式视为固定字符串的列表。

-G或–basic-regexp 将范本样式视为普通的表示法来使用。

-h或–no-filename 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。

-H或–with-filename 在显示符合范本样式的那一列之前,表示该列所属的文件名称。

-i或–ignore-case 忽略字符大小写的差别。

-l或–file-with-matches 列出文件内容符合指定的范本样式的文件名称。

-L或–files-without-match 列出文件内容不符合指定的范本样式的文件名称。

-n或–line-number 在显示符合范本样式的那一列之前,标示出该列的列数编号。

-q或–quiet或–silent 不显示任何信息。

-r或–recursive 此参数的效果和指定“-d recurse”参数相同。

-s或–no-messages 不显示错误信息。

-v或–revert-match 反转查找。

-V或–version 显示版本信息。

-w或–word-regexp 只显示全字符合的列。

-x或–line-regexp 只显示全列符合的列。

-y 此参数的效果和指定“-i”参数相同。

–help 在线帮助。

2.使用案例

(1)搜寻1.txt文件中字符串"the" 注: n为显示行号
grep -n ‘the’ regular_express.txt

(2)反向搜寻特定字符串"the"
grep -vn ‘the’ regular_express.txt

(3)取得任意大小写"the"的这个字符串
#grep-in ‘the’ regular_express.txt

(4)利用括号 [] 来搜寻集合字符 搜索test或taste这两个单词

grep -n ‘t[ae]st’ regular_express.txt

这样其实就是在找t[a]st和t[e]st这两个分开的字符

搜索有 oo 的字符时,则可以使用:# grep -n ‘oo’ regular_express.txt

(5)显示行首为’the’的字符串 # grep -n ‘^the’ regular_express.txt

(6)显示行首是小写字符 grep -n ‘1’ regular_express.txt

(7)显示行尾为点 . 的那一行 grep -n ‘.$’ regular_express.txt

(8)"goog"代表gog,goog,gooog…等 grep -n’goog’ regular_express.txt

(9)找出含g…g字符串的行grep -n ‘g.*g’ regular_express.txt

3.grep与管道
grep 的输入不一定都是文件,它也常常从管道读取输入



[root@yum test]# ls grep.txt sed1.txt sed2.txt sed.txt

[root@yum test]# ls | grep "grep" grep.txt

[root@yum test]# ls | grep "^gr" grep.txt


ls 的命令的输出通过管道传给 grep。输出结果字母 gr 开头的所有行都被打印出来了,也就是说,被选中的目录被打印出来了

sed

sed 编辑器逐行处理文件(或输入),并将输出结果发送到屏幕。sed
的命令就是在 vi和 ed/ex 编辑器中见到的那些。sed 把当前正在处理的行保存在一个临时缓存区中,这个缓存区称为模式空间或临时缓冲。sed处理完模式空间中的行后,sed 编辑器逐行处理文件,并将输出结果发送到屏幕.

sed 编辑器没有破坏性,它不会修改文件,除非使用shell 重定向来保存输出结果。

1.sed命令使用

常用选项:
-n 使用安静模式,在一般情况所有的 STDIN 都会输出到屏幕上,加入-n 后只打印被 sed 特殊处理的行

-e 多重编辑,且命令顺序会影响结果

-f 指定一个 sed 脚本文件到命令行执行,

-r Sed 使用扩展正则

-i 直接修改文档读取的内容,不在屏幕上输出

Sed操作命令:

sed 操作命令告诉 sed 如何处理由地址指定的各输入行。如果没有指定地址,sed 就会处理输入的所有的行

x:指定行号。

x,y:指定从x到y的行号范围

/ pattern/:查询包含模式的行 # # % %

/ pattern/ pattern/:查询包含两个模式的行

/ pattern/,x:从与 pattern的匹配行到x号行之间的行

x,/ pattern/:从x号行到与 pattern的匹配行之间的行

x,y!:查询不包括x和y行号的行

r:从另一个文件中读文件

w:将文本写入到一个文件

y:变换字符

q:第一个模式匹配完成后退出

l:显示与八进制ASCⅡ码等价的控制字符

{}:在定位行执行的命令组

p:打印匹配行

=:打印文件行号。

a:在定位行号之后追加文本信息

i:在定位行号之前插入文本信息。

d:删除定位行

c:用新文本替换定位文本

s:使用替换模式替换相应模式

n:读取下一个输入行,用下一个命令处理新的行

N:将当前读入行的下一行读取到当前的模式空间。

h:将模式缓冲区的文本复制到保持缓冲区

H:将模式缓冲区的文本追加到保持缓冲区

x:互换模式缓冲区和保持缓冲区的内容

g:将保持缓冲区的内容复制到模式缓冲区

G:将保持缓冲区的内容追加到模式缓冲区。

2.(1)删除

1.将/etc/passwd 的内容列出并打印行号,同时,将2-5行删除显示

nl /etc/passwd | sed ‘2,5d’

注: sed是sed-e的简写, 后接单引号

2.同上删除第2行 nl /etc/passwd | sed ‘2d’

3.同上删除第三行到最后一行 nl/etc/passwd | sed ‘3,$d’

4.删除批注行 sed ‘/^#.*/d’ /etc/inittab

5.删除注释以及空白行sed ‘/^#./d’ /etc/inittab|sed '/^\s$/d’

(2)插入

4.在第二行后加上一行test nl /etc/passwd | sed ‘2a test’

5.在第二行前加上一行test nl /etc/passwd | sed ‘2i test’

6.在第二行后加入三行test nl /etc/passwd|sed ‘2attttttt\ndddd\nhhh’

(3)替换

7.将2-5行内容取代为 No 2-5 number
nl /etc/passwd | sed ‘2,5c No 2-5 number’

8.把9.txt 文件中 old 替换为new
Sed ‘s/old/new/g’ 9.txt # s///g 内容替换g全局替换

(4)打印

10.列出/etc/passwd 内第5-7行 nl/etc/passwd |sed -n ‘5,7p’

(5)查询

11.获取本机IP的行 /sbin/ifconfig eth0 |grep ‘inet addr’

12.将IP前面的部分予以删除
/sbin/ifconfig eth0 |grep ‘inet addr’| sed ‘s/^.*addr://g’

例题:

(1)替换 1.txt文本中old为new,代码如下

sed 's/old/new/g ’ 1. txt

(2)打印 1. txt文本第一行至第三行,代码如下

Sed -n ‘1,3p’ 1.txt

(3)打印 1.txt文本中第一行与最后一行,代码如下

Sed -n ‘1p; $p’ 1.txt

(4)删除 1.txt第一行至第三行、删除匹配行至最后一行,代码如下

Sed ‘1,3d’ 1.txt

Sed ‘/aaaa/, $d’ 1.txt

(5)删除 1. txt最后3行及删除最后一行,代码如下:

Sed ‘$d’ 1.txt


  1. a-z ↩︎

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值