Linux教程

Linux正则表达式部分使用(5)

本文主要是介绍Linux正则表达式部分使用(5),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在linux中,用到正则表达的常用工具有:grep,sed,awk等。

grep


-c(count) :打印符合要求的行数

-i (ignore-case):忽略大小写

-n (line-number):在输出符合要求的行的同时连同行号一起输出

-v (invert-natch):打印不符合要求的行

-A (after-context):后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行

-B (before-context):后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行

-C (context):后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行

^                      :表示行的开始

$                       :表示行的结尾

-E                     :表示组合

.                     :表示任意一个字符

*                     :表示零个或多个前面的字符。

grep开始实践

 cat  pwd 

点击查看代码
root:x:0:0:root:/root:/bin/bash
root:x:0:0:Root:/root:/bin/root
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
zabbix:x:997:995:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
nginx:x:996:994:Nginx web server:/var/lib/nginx:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin

1 包含root

cat pwd  | grep "root"  

 

2 顺便打印行数

cat pwd  | grep -n "root"

 

3 不区分大小写或精准匹配

cat pwd  | grep -n -i  "root"

cat pwd  | grep -n -w  "root"

 

4 反选

cat pwd  | grep -n -v  "root" 

 

5 组合

cat pwd  | grep -n -E  "root|mysql"

 

6 以root开始

cat pwd  | grep -n   "^root"

 

7 以root结尾

cat pwd  | grep -n   "root$"

 

8 -A    -B   -C

cat pwd  | grep -n -A2   "root" 

cat pwd  | grep -n -B2   "root"  

cat pwd  | grep -n -C2   "root" 

 

9 字符. 任意一个字符

cat pwd  | grep -n    "r..t" 

 

10 字符* 表示零个或多个前面的字符。

cat pwd  | grep -n    "ro*t"

 

sed

sed全称是:Stream EDitor。(流编辑器)

语法:sed 参数 文件

-e command,–expression=command允许多台编辑。

-h,–help打印帮助,并显示bug列表的地址。

-n,–quiet,–silent取消默认输出。

-f,–filer=script-file引导sed脚本文件名。

-V,–version打印版本和版权信息。

sed开始实践

cat ttt

点击查看代码
1111
2222
3333
4444
5555
6666
7777

p表示打印行。

1 一行

cat ttt | sed -n "1p"   

 

2 多行 

cat ttt | sed -n "1,3p"   

 

3 包含某个字符串的行

cat ttt | sed -n  "/111/p"   

 

4 -e可以实现多个行为

cat ttt | sed -n -e "1p" -e "/222/p"

 

5 替换字符或字符串:

‘s’ 就是替换的命令, ‘g’ 为本行中全局替换,如果不加 ‘g’ 只换该行中出现的第一个。

除了可以使用 ‘/’ 作为分隔符外,还可以使用其他特殊字符例如 ‘#’ 或者 ‘@’ 都没有问题。

sed '1s/11/ggg/g' ttt

 

6 直接修改文件的内容

sed -i '2s/22/gg/g' ttt

 

awk

awk是一个报告生成器,拥有强大的文本格式化能力。它的命名方式也是由三位大佬,分别叫Aho,Weinberger,Kernighan,的三个人,awk命令取得他们的名字首字母。

awk基本语法:

awk [option] 'pattern{action}' file1,file2,...filen

awk开始实践

cat testpwd 

root:x:0:0:root:/root:/bin/bash
root:x:0:0:Root:/root:/bin/root
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

cat awk_test.txt

name    age     score
lqd     45      87
my      47      88
wrz     25      98
wnz     56      98

-F 选项的作用是指定分隔符,默认空格或者tab为分隔符。 Print为打印的动作,用来打印出某个字段。

\$1为第一个字段,\$2为第二个字段,依次类推,有一个特殊的那就是$0,它表示整行。

 

1 截取文档中的某个段:

cat awk_test.txt | awk '{print $1}'

 

2 匹配字符或字符串

cat awk_test.txt | awk '/name/'

cat awk_test.txt | awk '/name/{print $2}'

cat awk_test.txt | awk '/name/{print $2,$3}'

 

3 条件操作符:

awk中是可以用逻辑符号判断的,比如 ‘==’ 就是等于,另外也有 >, ‘>=, ‘<, ‘<=, ‘!= 等等

cat testpwd | awk -F ":" '$3>1 {print $3}'

cat testpwd | awk -F ":" '$3>1 {print $1}'

 

4 awk的内置变量:

NR 行号,当前处理文本行的行号

NF 当前行的字段的个数

不止两个

cat testpwd | awk -F ":" '{print NR}'

cat testpwd | awk -F ":" '{print NF}'

这篇关于Linux正则表达式部分使用(5)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!