sed&awk&grep

  1. 正则
  2. grep
    1. 匹配行常用命令
    2. 正则
  3. awk
  4. sed

正则

表达式 含义
(?=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还可以指定BEGINEND脚本。 在运行命令开始前执行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