linux初学之grep   sed   awk 正则表达基本例子

. 表示任意一个 (数字,#,空格,特殊符号,字母)

*表示0个或多个*号前面的字符

+表示一个或多个+前面的字符

?表示一个或零个前面的字符

.*表示任意一个任意字符(贪婪的匹配方法)

?,+,(),|,{},[]需要脱意

参数:

-c  一用有多少行

-An n为数字,这一行以及下面(After)n行打印出来

-Bn n为数字,这一行以及上面n(Bfore)行打印出来

-Cn n为数字,上下n行打印出来

[[email protected] ~]#grep -n ‘root‘ 1.txt 打印出含有root的行并显示行数

-n  过滤关键词的行并显示出在第几行

[[email protected] ~]#grep -v ‘root‘ 1.txt |wc -l   不含有root的行,统计一共有几行

-v 表示取反

-o 只显示符合的对象

[[email protected] ~]#gerp ‘^[0-9]‘ 1.txt                  以数字开头

^ 表示行首 eg ^5 以5为开头

$ 表示行尾 eg 5& 以5为结尾

^$ 表示空行

[0-9]表示0-9其中任意一个 [a-zA-Z]表示任意字母

[^0-9]在中括号里面加^表示取反:以非数字开头,空行不会打印出来

[[email protected] ~]#grep -v ‘^$‘ 1.txt|grep -v ‘^#‘       去掉空行和#号开头的行

[[email protected] ~]#grep ‘r.o‘ 1.txt    r与0之间存在一个字符

.表示任意一个字符,可以是空格,数字,特殊符号

[[email protected] ~]#grep -E ‘r?o‘ 1.txt        一个或者零个r ="o" "ro"

-E=egrep ?为特殊符号,+也需要-E

?表示一个或者零个?前面的字符

[[email protected] ~]#grep ‘r*o‘ 1.txt            零个或者多个r  =>0

*表示0个或多个*号前面的字符

[[email protected] ~]#grep -E ‘r+o‘ 1.txt           一个或者多个  >=1

+表示一个或者多个前面的字符 需要加参数-E

[[email protected] ~]#grep ‘(oo)+‘ 1.txt  表示含有一个或者多个(oo)

(  )括号里面的内容为一个整体

[[email protected] ~]#grep -E ‘root|sbin‘ 1.txt  包含root或者sbin

| 表示或者的意思 需要加-E

[[email protected] ~]#grep -E ‘o{2}‘ 1.txt     出现两次o

{} 里面的数字表示前面的字符出现的次数 需要加-E 或者使用\脱意[[email protected] ~]#grep -E ‘o\{2\}‘ 1.txt

sed

sed可以实现找出指定的行,更多的是实现替换

[[email protected] ~]#sed -n ‘1,$‘p 1.txt    打印出全部内容

不加-n 会打印2次, -n与p一起用

[[email protected] ~]#sed -n ‘1‘p 1.txt     打出第1行

‘1‘p   n位数字,表示打出指定的1行;

‘1,2‘ n,m为数字,打印指定n到m行

实现grep功能

[[email protected] ~]#sed -n ‘/root/‘p 1.txt 打印出有root的行

实现删除的功能

[[email protected] ~]#sed  ‘/root/‘d 1.txt  删除含有root的行

[[email protected] ~]#sed -i  ‘/r*o/‘d 1.txt

[[email protected] ~]#sed  ‘1,3‘d 1.txt  删除1到3行

支持r*o 这种类型 不需要加-n

-i可以直接修改原文件

-r 特殊符号不用脱意

替换功能

[[email protected] ~]#sed ‘s/root/123/g‘  1.txt     用123替换root

标准格式为 sed ‘s///‘ 或者sed ‘s###‘

加上g 为全局

[[email protected] ~]#sed ‘5,10s/root/123/g‘  1.txt  指定5到10行

[[email protected] ~]#sed -n -e ‘/root/‘p  -e ‘s/root/123/g‘ 1.txt    选取root行并123替换root

[[email protected] ~]#sed -n ‘/root/p; /lp/p‘           同时进行多条命令

-e 可以加多个命令,;两者输出顺序有差别

[[email protected] ~]#sed -n ‘s/ROOT/123/ig‘   不区分大小写,123替换ROOT和root

i选项只能用在替换

[[email protected] ~]#sed -r   ‘s#(^.*)(:.*:)(/.*$)#\3\2\1#‘  filename

替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5

[[email protected] ~]#sed -r ‘s#(id:)3(:initdefault:)#\15\2#g‘ /etc/inittab

(id:)==\1  (:initdefault:)==\2  3改成5

[[email protected] ~]#sed -r ‘s#id(.*)#1\1#g‘ /etc/inittab  把id改成1

.*代表id后面一部分

awk

awk类似于cut

[[email protected] ~]#awk -F: ‘{print $3,$4,$5}‘  1.txt  截取第3段第4段第5段

[[email protected] ~]#awk -F: ‘OFS="@" {print $3,$4,$5}‘

[[email protected] ~]#awk ‘/root/‘  1.txt    查找有root的行

[[email protected] ~]#awk -F:‘$3==3‘ 1.txt  找出以冒号为分割第3行为3的数

[[email protected] ~]#awk -F:‘$1==“root”‘ 1.txt 找出第一行为root的行,root需要“” 引起来

假如只有一个= 等于赋值,要两个=

[[email protected] ~]#a=3;awk -F: ‘$3="‘$a‘"‘ 1.txt    打印出第3行

要在awk里面引入变量需要双引号加单引号

[[email protected] ~]#awk -F:‘$1~/oo/‘ 1.txt 第一行包含有oo的

~为模糊匹配

[[email protected] ~]#awk -F:‘/root/; $1~/hjd/; $3~/50/‘ 1.txt  包含有root或者第一行模糊含有hjd或第3行50的行

; 相当于sed -E 可以多个条件匹配;条件符合几次就会出现几次

条件操作符:

>    <   ==  !=    >=    <=

[[email protected] ~]#awk -F: ‘$1>=500‘ 1.txt 第一段大于等于500

假如是数字则不需要加“”  字符串需要加“”

[[email protected] ~]#awk -F ‘{print NF}‘1.txt  以冒号为分割分割成几段

NF段数

[[email protected] ~]#awk -F ‘NR>40‘ 1.txt   打印40行以外的行

NR显示行数 可加条件判断

时间: 2024-10-09 21:18:27

linux初学之grep   sed   awk 正则表达基本例子的相关文章

LINUX 下 find grep sed awk 的常见基本用法特点

LINUX 下 find grep sed awk 的常见基本用法特点 只为让自己具有更高的水准,这就开始了长达6个月的小白进阶路! 这几天学习linux基础命令有点犯蒙,尤其是对文件查找这块.所有我想把一些我觉得常用的实用的参数项总结下来,大神勿喷哈... 不到之处请大家指教,小女子在此谢过了. 一.find:命令用于查找文件系统中指定的文件,其命令格式为: 1.find pathname -options [ -print  -exec  -ok ... ] (1)find 命令的参数: p

Linux命令之grep/sed/awk等行转列

行转列样例文件如下 cat file.txt a b c d e f g h i cat file.txt |xargs -n1 xargs -n 1 < file.txt tr " " "\n" < file.txt 4.sed 's/ /\n/g' file.txt   此命令在Linux上执行正常,在Mac上执行无效,原因是因为Mac上的sed是BSD版本,Linux上的是Gnu版本,在Mac上需要使用sed -e 's/ /\'$'\n/g' f

Linux三剑客grep/sed/awk

grep/sed/awk被称为linux的“三剑客” grep更适合单纯的查找或匹配文本: sed更适合编辑匹配到的文本: awk更适合格式化文本,对文本进行较复杂各式处理: Grep --color=auto 或者 --color:表示对匹配到的文本着色显示 -i:在搜索的时候忽略大小写 -n:显示结果所在行号 -c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数 -o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行 -v:输出不带关键字的行(反向查询,反

Linux的文本编辑diff & sed & awk & grep

grep(关键字: 截取) 文本搜集工具, 结合正则表达式非常强大    主要参数 []    -c : 只输出匹配的行    -I : 不区分大小写    -h : 查询多文件时不显示文件名    -l : 查询多文件时, 只输出包含匹配字符的文件名    -n : 显示匹配的行号及行    -v : 显示不包含匹配文本的所有行(我经常用除去grep本身)    基本工作方式: grep 要匹配的内容 文件名, 例如:    grep 'test' d* 显示所有以d开头的文件中包含test的

grep,sed,awk与简单正则表达式应用

grep,sed,awk与简单正则表达式应用 这里使用的测试文件是linux /etc/passwd文件,最好是复制一份进行练习,方式对文件内容造成损坏.感觉还是要多练习才能很好的使用,习题这里就不贴了,网上一找一大把. grep:   -o 用作计算出现多少次字段  -c 打印符合要求的行数  -n 在输出符合要求的行的同时也打印行号  -v 打印不符合要求的行  -A 后跟一个数字 ps -A2表示打印符合要求的行及下面两行  -B 后跟一个数字 ps -B2表示打印符合要求的行及上面两行 

[CentOS 7系列]grep/sed/awk实战

最近准备和CoreSite - Any2 California接入商建立网络BGP邻居关系.从peeringdb (https://www.peeringdb.com/ix/142)上找到了所有接入商的信息,但是转移信息到本地不是很方便,需要进行多次文本调整,耗时较长.作为萌新,立马就想到近期学习的grep/sed/awk工具.于是就尝试处理数据. 1.下载页面内容 curl https://www.peeringdb.com/ix/142 > peering 将页面内容存入peering文件

十七. 正则以及grep ,sed,awk的简单应用

一.正则表达式:/ / grep,sed,awk 都能解释正则表达式 正则表达式:把一些特殊符号组合到一起描述字符和字符串的方法.^ 以什么开头 grep '^root' /etc/passwd$ 以什么结尾 如能登入系统的所有用 grep 'bash$'/etc/passwd. 任意一个字符 grep '^b.n' /etc/passwd 过滤取到bin的.* 所有字符* 代表前面的字符有0个或者无穷个 grep 'b*' /+ 必须用egrep 或 egrep -E 'ab+'表示前面的字符

find/pg/grep/sed/awk命令

find pathname -options [-print -exec -ok ...] -print: find命令将匹配的文件输出到标准输出. 当前目录下查找文件权限位为 7 5 5的文件 $ find . -perm 755 -print 当前目录及子目录中查找文件名以一个大写字母开头的文件 $ find . -name "[A-Z]*" 希望在系统根目录下查找更改时间在 5日以内的文件 $ find / -mtime -5 -print 为了在/var/adm目录下查找更改时

三个支持正则表达式的行处理的工具: grep/sed/awk

grep: 全称Global Regular Expression Print, 是干什么的,不多说了: 用法:grep [-options] [pattern] [filename] 选项: -c: 只输出匹配行的数目 -i: 不区分大小写 -n:显示匹配航以及行号 -l:查询多文件的时候只输出包含匹配字符的文件名 -L: 列出不匹配的文件名: -v:反向匹配,即显示不匹配的行 -h: 查询的时候不适用文件名 -s:不显示错误信息 -E 使用扩展正则表达式 //很有用啊, -A :后跟一个数字