正则
表达式 | 含义 |
---|---|
(?=pattern) | 正向肯定预查 常用于匹配到pattern 不包括pattern |
(?<=pattern) | 反向肯定预查 常用于从pattern之后匹配 不包括pattern |
[root@fish ~]# cpu="Intel(R) Celeron(R) CPU J1900 @ 1.99GHz"
[root@fish ~]# echo $cpu
Intel(R) Celeron(R) CPU J1900 @ 1.99GHz
[root@fish ~]# echo $cpu | grep -Po '.*(?<=CPU)'
Intel(R) Celeron(R) CPU # 包括CPU
[root@fish ~]# echo $cpu | grep -Po '(?<=CPU).*'
J1900 @ 1.99GHz # 不包括CPU
[root@fish ~]# echo $cpu | grep -Po '.*(?=CPU)'
Intel(R) Celeron(R) # 不包括CPU
[root@fish ~]# echo $cpu | grep -Po '(?=CPU).*'
CPU J1900 @ 1.99GHz # 包括CPU
grep
grep我之前只是用来匹配结果中的行,也可以通过正则表达式匹配更加具体的内容
匹配行常用命令
命令参数 | 含义 |
---|---|
-o, –only-matching | 只打印匹配的非空内容(默认显示带匹配内容的行) |
-v | 不显示匹配的内容 |
正则
grep支持三种不同版本的正则表达式
basic(BRE)
extended(ERE)
perl(PCRE)
在GUN实现中前两种相同,而其他版本中basic要轻量一些
而常用的断言匹配则在perl实现中可以使用
awk
awk会针对每一行数据运行脚本命令 脚本格式一般为'{command}'
通过-F
命令可以指定分隔符 默认为任意空白字符 制表符或者空格
之后awk每次读取一行数据,使用分隔符对其进行分割。
$0整行数据
$1第一个字段
$2第二个字段
$n第n个字段
awk还可以指定BEGIN
和END
脚本。 在运行命令开始前执行BEGIN脚本运行结束后执行END脚本
awk 'BEGIN{}{}END{}'
sed
流式文本处理
s替换命令 使用e和分号指定多个替换
[root@fish ~]# echo "This is a test" | sed 's/test/big test/'
This is a big test
[root@fish ~]# echo "This is a test" | sed -e 's/test/big test/;s/a/aa/'
This is aa big test