grep,sed,awk 个人总结

正则表达式

ifconfig |sed -n ‘2p‘ |sed ‘s.*inet//g‘ |sed ‘s#netmask.*$##g‘ #用/ # 均可 理论可用任何特殊字符替代
#sed -r 后面可跟扩展正则 扩展正则 + (.*)
ifconfig |sed -n 2p |sed -r ‘s#^.*inet (.*) Broast.*$#\1#g‘ # \1 代表正则中的第一个GROUP 即(.*)里的内容

ifconfig |sed -nr ‘2s#^.*inet (.*)net.*$#\1#gp‘ #合成一行
ifconfig |awk ‘NR==2{print $2}‘ #取IP地址 awk 默认分隔符是空格 取IP 最方便

ifconfig ens33| grep -o "inet [0-9.]*" |grep -o "[0-9.]*" #取IP
ifconfig ens33| sed -nr ‘2s#^.*inet ([0-9].*)netmask.*$#\1#gp‘

cat oldboy.txt| sed -r ‘s#^ .*inet(.*)netmask(.*)broadcast(.*)$^C1 \2 \3 #g‘

sed -r ‘s#(.*):(.*):(.*):(.*):(.*):(.*):(.*)$#\7 \6 \5 \4 \3 \2 \1#g‘ #后向引用换位置 sed最多引用9个,用awk更方便

sed -n ‘/^$/d‘ #空行删除 //中写字符串

sed ‘1,2s#C#--&-#g‘ # 这里&代表C C 也可以是正则表达式

ls | sed ‘s#(^.*)haha#mv \1.jpg#g‘ |bash

sed ‘1~2p‘s #a i d奇数行
sed ‘2~2p‘s #a i d偶数行

sed ‘s#^#head#g‘ #头加
sed ‘s#$#tail#g‘ # 尾加

sed ‘s#^#test#g‘ #开头加test
sed ‘s#$#test#g‘ #末尾加test

sed多行操作 sed ‘2a,str‘ ‘1~2a,str‘ ‘1,10i,str‘ / ‘1,2d‘ ‘5~10d‘ / ‘1~3p‘ ‘1,3p‘
#sed 在 a i d 的时候 必须有相应的行,空文件会出错,也就是说 空文件无法直接用sed 添加
sed ‘/new/d‘ # 删除包含new的行 sed命令中 -n p sed 中 -n p 基本都是成对出现

awk -F ":" ‘{print $1":"$2":"$3":"$4":"$5":"$6":"$7"------"$1}‘ passwd #这里是全文操作

awk -F "5:5|28" ‘NR==5{print $2}‘ #5:5 或 28 作为分隔符 两个字符串 这种格式最好用| 即使单个字符也用| 否则字符串造成歧义

ll | awk ‘{if($2>5) print $0}‘ $0 表示整行
sed -i ‘s#pp#dd#g‘ 1.txt 将1.txt 文件中的pp 改成dd 立即生效 -i 代表直接写入文件

#在LINUX 中,所有的文本处理 都是读取一行(进内存) 处理一行 输出一行 直接循环结束
正则表达式 字符串用"" 以防问题

^.*  以任意字符开头
.*$  以任意字符结尾
^word 以word 开头
word$ 以word 结尾
[^word] 括号里的是取反
.     只代表一个字符  "是字符就匹配上了  所有除空行" 空格和空行是不一样的
\ 转义
*  重复前面0或多个字符
.*    所有
[abc] 匹配集合内任意一个字符
[^abc] 匹配集合内除abc 的任意一个字符
[0-9]  [a-z] [A-Z]
a\{n,m\} 重复a   至少n次到至多m 次  ##  a\{n,m\} 这种形式必须用""引起来   且""两边没有空格 ,否则会报错
a\{n,\}  a\{,m\}  a\{n\}重复n次

egrep sed -r 可以不使用\转义

## 了解  扩展正则表达式  grep -E  egrep
+ 一个或一个以上  (*是0或多)
? 0或一个前面字符
| 表示同时过滤多个字符串    egrep "sshd|systemd"
() 后向引用    参考(.*)  \1

grep -n -i 不区分大小写  -o 只显示匹配到的内容 不输出整行

find /test -type f -name "*.sh" |xargs sed -i ‘s#old#new#g‘   ! 叹号可取反 -a and -o or
也可同时写  sed -i ‘s#old#new#g‘  *.sh

#awk
NR  $0整行 $1 $2   $NF最后一列 NF 为全行列数
$(NF-1)倒数第二行

#awk原理  一行是一个记录
#RS表示一个记录的结束  FS表示一个区域的分隔 $NF 为最后一个区域

ifconfig |awk ‘BEGIN{RS=":"}‘‘{print $1}‘  以:为代替回车 为换行符

#正则 条件(NR==2)  范围(NR==2,NR==5)2到5
# $1~/正则开始/,$3~/正则结束/

awk -F "[ :]+|\t+" ‘{print $2}‘ grade   以1个或多个 :(空格或冒号)或1或多个tab制表符 作为分隔符  

#BEGIN模块 END模块
seq 1 100 |awk ‘{a+=$1}‘‘END{print a}‘  1加到100

cat passtemp  |awk ‘{sub(/x/,"ppp")}‘‘{print $0}‘  awk替换

awk ‘$1~/lisi/{print $0}‘ grade    grade文件匹配$1 包括lisi的行 并打印出行

awk ‘$4~/(5|3)$/{print $0}‘ grade   匹配 5 或 3结尾
awk ‘$1~/^[l|W]/{print $0}‘ grade    匹配l 或 W 开头   用[] 和()都可为了和正则匹配   强烈建议用[]
awk -F "\t" ‘$3~/^9/{print $0}‘ grade

#不包含:!,在awk中不包含可以使用! 表示
#在awk中,可以用来替换的有三个函数:sub gsub gensubsub(r, s [, t]) 

               r  /找谁/

               s  "替换成什么"

               [] 替换那个部分的

awk ‘$1~/zhan/{gsub(/zhang3/,"ccccc",$1);print $0}‘ grade
##注意  /zhang3/  "ccccc"   以及多个命令间用;  分号

原文地址:https://blog.51cto.com/14316149/2463386

时间: 2024-11-06 07:26:06

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

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

Linux三剑客grep/sed/awk

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

十七. 正则以及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+'表示前面的字符

Using of grep sed awk on Linux

#This script is to parse data file: fun0() { ## [INFO1]a=1   b=2 c=3 [INFO2]a=7 b=8 c=9 [INFO3] a=x b=y c=z } #! /bin/bash read Info Abc#echo $Info if [ "$Info" != "INFO1" -a "$Info" != "INFO2" -a "$Info"

linux grep sed awk

$ grep 'test' d* 显示所有以d开头的文件中包含 test的行. $ grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test的行. $ grep '[a-z]\{5\}' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行. $ grep 'w\(es\)t.*\1′ aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行.如果用egrep或grep

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目录下查找更改时

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

. 表示任意一个 (数字,#,空格,特殊符号,字母) *表示0个或多个*号前面的字符 +表示一个或多个+前面的字符 ?表示一个或零个前面的字符 .*表示任意一个任意字符(贪婪的匹配方法) ?,+,(),|,{},[]需要脱意 参数: -c  一用有多少行 -An n为数字,这一行以及下面(After)n行打印出来 -Bn n为数字,这一行以及上面n(Bfore)行打印出来 -Cn n为数字,上下n行打印出来 [[email protected] ~]#grep -n 'root' 1.txt 打

grep sed awk

grep查找 结合正则表达式功能十分强大 grep [选项] 要查找内容(可用正则表达式) 在该文件中查找 常用选项: -c    只显示匹配的行 -h    查询多文件时不显示文件名 -I    不区分大小写 -l    查询多文件时,只输出匹配文件的文件名 -n    显示匹配的行及行号 -v    显示不包含匹配文本的所有行 实例1: 不想搜到ld前面有e的那行  使用反选项[^] 实例2: 除了连续编码使用[-]外,也可以用[:lower:]代替a-z  [[:lower:]]代替[a-