正则扩展练习
2017-08-04 00:00
183 查看
grep命令的-P选项:
最典型的用法是,匹配指定字符串之间的字符。 比如,我们想在一句话(Hello,my name is aming.)中匹配中间的一段字符串(my name is) 可以这样写正则表达式。 # echo "Hello, my name is aming."|grep -P '(?<=Hello, ).*(?= aming.)' 如果只需要匹配到的部分,还可以加上-o选项 # echo "Hello, my name is aming."|grep -Po '(?<=Hello, ).*(?= aming.)' 根据这个思路,我们可以去匹配IP地址 # ifconfig eth0 |grep -Po '(?<=addr:).*(?= Bcast)'
打印文件中特定的某行到某行之间的内容:
例如:有个文件test的内容如下: ert fff ** [abcfd] 123 324 444 [rty] ** fgfgf 怎么能截取 [abcfd] 123 324 444 [rty] 这一部分出来呢? #sed -n '/\[abcfd\]/,/\[rty\]/'p test (如果使用-rn 中间的逗号就不会起作用) 扩展: # sed -n '/03\/Mar\/2016:02:52/,/03\/Mar\/2016:03:03:20/'p /usr/local/nginx/logs/cn.log |awk '{print $1}'|sort|uniq -c|sort -rn //查日志的时候非常有用
sed 如何转换大小写字母:
sed中,使用\u表示大写,\l表示小写 1. 把每个单词的第一个小写字母变大写:(\b后面例子) # sed 's/\b[a-z]/\u&/g' filename 2. 把所有小写变大写: # sed 's/[a-z]/\u&/g' filename 3. 大写变小写: # sed 's/[A-Z]/\l&/g' filename
# sed -n "/abc\b/" file.log 里面这个\b是什么意思呢? \b 是 boundary(边界) 的意思,表示单词到此结束,能够匹配 abc,但不匹配 abcd 等
打印奇数行或偶数行:
方法1:# sed -n 'p;n' test.txt #奇数行 # sed -n 'n;p' test.txt #偶数行 方法2:# sed -n '1~2p' test.txt #奇数行 # sed -n '2~2p' test.txt #偶数行
sed在文件中制定以什么开头或结尾的行最后添加一个数字:
#cat test askdj aslkd aslkdjf3e skdjfsdfj sdkfjk fsdkfjksdjfkjsdf 12sdfesdf aslkdjfkasdjf asdlfkjaskdfj # sed 's/^a.*/& 12/g' test //以a开头的任何行,在其末尾添加 12 askdj 12 aslkd aslkdjf3e 12 skdjfsdfj sdkfjk fsdkfjksdjfkjsdf 12sdfesdf aslkdjfkasdjf asdlfkjaskdfj 12
如何使用sed打印1到100行包含某个字符串的行:
# sed -n '1,100{/abc/p}' 1.txt # sed -n '1,100p' /etc/passwd | grep root
位置调换:
把/etc/passwd 复制到/root/password,
把passwd中第一个单词和最后一个单词调换位置: # sed -r 's#([^:]+):(.*):([^:]+)#\3:\2:\1#g' passwd
把passwd中出现的第一个数字和最后一个单词替换位置: # sed -r 's#([0-9]+):([0-9]+):([^0-9]+):(.*)/([^0-9]+)#\5:\2:\3:\4:\1#g' passwd
把passwd 中第一个数字移动到行末尾: # sed -r 's#([0-9]+):([0-9]+):([^0-9]+):(.*)/([^0-9]+)#\2:\3:\4:\5:\1#g' passwd
在passwd 20行到末行最前面加 ‘aaa:’ # sed '20,$s/^/aaa: &/' passwd
grep 或 egrep 或awk 过滤两个或多个关键词: # grep -E '123|abc' filename // 找出文件(filename)中包含123或者包含abc的行 # egrep '123|abc' filename //用egrep同样可以实现 # awk '/123|abc/' filename &nb 3ff8 sp; // awk 的实现方式
用awk编写生成以下结构文件的程序:
用awk编写生成以下结构文件的程序。( 最后列使用现在的时间,时间格式为YYYYMMDDHHMISS) 各列的值应如下所示,每增加一行便加1,共500万行。 1,1,0000000001,0000000001,0000000001,0000000001,0000000001,0000000001,2005100110101 2,2,0000000002,0000000002,0000000002,0000000002,0000000002,0000000002,2005100110101
#awk BEGIN{for(i=1;i<=10;i++)printf("%d,%d,%010d,%010d,%010d,%010d,%010d,%010d,%d\n",i,i,i,i,i,i,i,i,strftime("%Y%m%d%H%M"))}'
解释: %d:直接输出结果 %010d:输出以长度为10位数不足用0补足 strftime()函数的用法: %Y 年 %m 月份 %d 日期 %H 小时 %M 分钟 strftime()的用法举例如下: select strftime('%Y.%m.%d %H:%M:%S','now','localtime'); 结果:2006.10.17 21:41:09
把两个文件中相同的行合并成一行:
paste filename1 filename2这样就可以实现了。举个例子。 cat a.txt 1 2 3 4 5 6 a b c cat b.txt 3 2 1 6 5 4 c b a 则 paste a.txt b.txt 结果为 1 2 3 3 2 1 4 5 6 6 5 4 a b c c b a
如果,你想在两个文件连接处用一个指定的字符连接,还可以用
-d来指定
paste -d '+' a.txt b.txt 结果为 1 2 3+3 2 1 4 5 6+6 5 4 a b c+c b a
/etc/passwd
显示第二行到第五行的行号和整行的内容: # awk -F ':' 'NR>=2 && NR<=5 {print NR,$0}' /etc/passwd 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
显示从以bin开头的行,到第五行中的行号和整行内容: [root@zhdy-01 awk]# awk -F ':' '/^bin/,NR==5 {print NR,$0}' /etc/passwd 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
从第五列以bin开始的行到以lp开头的行并显示其行号和整行内容: [root@zhdy-01 awk]# awk -F ':' '$5 ~ /^bin/,/^lp/ {print NR,$0}' /etc/passwd 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
统计/etc/servies文件里的空行数量: [root@zhdy-01 awk]# grep "^$" /etc/services | wc -l 16
[root@zhdy-01 awk]# grep -c "^$" /etc/services 16
取eth0的IP地址: [root@zhdy-01 awk]# # ifconfig ens33 | awk -F "[^0-9.]+" 'NR==2{print $2}' 192.168.197.133
相关文章推荐
- jQuery扩展插件以及正则相关函数练习
- Java基础知识强化74:正则表达式之分割功能 (扩展练习)
- 正则判断邮箱练习
- 正则表达式中"?"的扩展用法
- java正则表达式练习
- Python网页抓取正则表达式应用练习-爬取基金信息
- 正则的扩展
- JQuery easyUI扩展验证机制的正则表达式
- 正则表达式:网页爬虫:从TXT中获取邮箱地址(获取的练习,缺点:一行只能匹配一个)
- Dave Python 练习十七 -- 正则表达式
- PHP扩展之文本处理(二)——PCRE正则表达式语法10——后向引用
- 正则实践练习
- lamda表达式,扩展方法,委托练习(lamda表达式=委托)
- js 正则练习之语法高亮
- 【ES6】正则的扩展
- linux基本正则和扩展正则建dan
- #小练习 正则表达式匹配邮箱名称
- GREP正则表达式 扩展正则表达式 重定向
- asp.net 练习正则表达式
- Linux中通配符、正则表达式和扩展正则表达式