Linux5.6 正则练习
1. 把test.txt 中出现第一组数字移动到行末尾
[root@chyuanliuNJ awk]# sed -nr '24,28s#([^0-9][^0-9]*)([0-9][0-9]*)([^0-9].*$)#\1\3\2#'p text.txt operator:x::0:operator:/root:/sbin/nologin11 games:x::100:games:/usr/games:/sbin/nologin12 games:x::100:games:/usr/games:/sbin/nologin12 ftp:x::50:FTP User:/var/ftp:/sbin/nologin14 ftp:x::50:FTP User:/var/ftp:/sbin/nologin14
2. 把test.txt中出现的第一个数字和最后一个单词替换位置
[root@chyuanliuNJ awk]# sed -nr '7,11s#([^0-9][^0-9]*)([0-9][0-9]*)([^0-9].*)([^a-zA-Z])([a-zA-Z][a-zA-Z]*$)#\1\5\3\4\2#'p text.txt bin:x:nologin:1:bin:/bin:/sbin/1 bin:x:nologin:1:bin:/bin:/sbin/1 daemon:x:nologin:2:daemon:/sbin:/sbin/2 daemon:x:nologin:2:daemon:/sbin:/sbin/2 adm:x:nologin:4:adm:/var/adm:/sbin/3 [root@chyuanliuNJ awk]# sed -n '7,11'p text.txt bin:x:1:1:bin:/bin:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin
3. 每个单词的第一个小写字母变大写;所有小写变大写;所以大写变小写
[root@chyuanliuNJ awk]# sed -nr '26,28s/\b[a-z]/\u&/g'p text.txt Games:X:12:100:Games:/Usr/Games:/Sbin/Nologin Ftp:X:14:50:FTP User:/Var/Ftp:/Sbin/Nologin Ftp:X:14:50:FTP User:/Var/Ftp:/Sbin/Nologin [root@chyuanliuNJ awk]# sed -n '26,28s/[a-z]/\u&/g'p text.txt GAMES:X:12:100:GAMES:/USR/GAMES:/SBIN/NOLOGIN FTP:X:14:50:FTP USER:/VAR/FTP:/SBIN/NOLOGIN FTP:X:14:50:FTP USER:/VAR/FTP:/SBIN/NOLOGIN [root@chyuanliuNJ awk]# sed -n '3,4s/[A-Z]/\l&/g'p text.txt root:x:10 root:x:10
4. awk 中使用外部shell变量
5. awk 合并一个文件
#我有这样的需求,需要把两个文件中,第一列相同的行合并到同一行中。举个例子,有两个文件,内容如下 cat 1.txt 1 aa 2 bb 3 ee 4 ss cat 2.txt 1 ab 2 cd 3 ad 4 bd 5 de 合并后的结果为: 1 ab aa 2 cd bb 3 ad ee 4 bd ss 5 de
[root@chyuanliuNJ awk]# awk '{if(NR==FNR){a[$1]=$2}};{if(NR>FNR){print $0,a[$1]}}' 1.txt 2.txt 1 ab aa 2 cd bb 3 ad ee 4 bd ss 5 de
6. awk中gsub函数的使用
#text.txt文件中把所有www替换为abc [root@chyuanliuNJ awk]# awk 'gsub(/www/,"abc")' text.txt abc:x:1002:1002::/home/abc:/bin/bash abc:x:1002:1002::/home/abc:/bin/bash #替换$1中的www为abc [root@chyuanliuNJ awk]# awk -F ':' '{OFS=":"} gsub(/www/,"abc",$1) {print $0}' text.txt abc:x:1002:1002::/home/www:/bin/bash abc:x:1002:1002::/home/www:/bin/bash
7. awk用print打印单引号
awk '{print "This is a '"'"'"$1} filename #在awk中使用脱义字符\是起不到作用的,如果想打印特殊字符,只能使用'""' 这样的组合才可以。这里自左至右为单引号 双引号 双引号 单引号其中两个单引号为一对,两个双引号为一对。想脱义$那就是'"$"' 脱义单引号那就是 '"'"'
[root@chyuanliuNJ awk]# awk -F ':' 'NR<=5 {print "'"$"'"$1}' text.txt $root $root $ROOT $ROOT $Chy
8. 合并两个文件
#paste filename1 filename2 [root@chyuanliuNJ awk]# cat 1.txt 1 aa 2 bb 3 ee 4 ss [root@chyuanliuNJ awk]# cat 2.txt 1 ab 2 cd 3 ad 4 bd 5 de [root@chyuanliuNJ awk]# paste 1.txt 2.txt 1 aa 1 ab 2 bb 2 cd 3 ee 3 ad 4 ss 4 bd 5 de #如果想在两个文件连接处用一个指定的字符连接,还可以用-d来指定 [root@chyuanliuNJ awk]# paste -d '++' 1.txt 2.txt 1 aa+1 ab 2 bb+2 cd 3 ee+3 ad 4 ss+4 bd +5 de
9. awk其他用法http://www.cnblogs.com/emanlee/p/3327576.html
http://ask.apelearn.com/question/213 sed删除某关键字的下一行到最后一行
http://ask.apelearn.com/question/199 awk 中使用外部shell变量
http://ask.apelearn.com/question/266 把一个文件多行连成一行
http://ask.apelearn.com/question/224 截取多个域为一行
http://ask.apelearn.com/question/5494 用awk生成以下结构文件