Linux三剑客grep,sed,awk及使用介绍

Linux 三剑客是(grep,sed,awk)三者的简称,熟练使用这三个工具可以提升运维效率。Linux 三剑客以正则表达式作为基础,而在Linux系统中,支持两种正则表达式,分别为“标准正则表达式”和“扩展正则表达式”。在掌握好正则表达式后,将具体讲解三剑客的用法。

一、正则表达式 正则表达式:REGular EXPression, REGEXP 元字符: .: 匹配任意单个字符 []: 匹配指定范围内的任意单个字符 [^]:匹配指定范围外的任意单个字符 字符集合:[:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:], [:alnum:] 注意:字符集合要用[ ]包含 匹配次数(贪婪模式): *: 匹配其前面的字符任意次 a, b, ab, aab, acb, adb, amnb a*b, a?b a.*b .*: 任意长度的任意字符 \?: 匹配其前面的字符1次或0次 \+:匹配至少一次 \{m,n\}:匹配其前面的字符至少m次,至多n次 \{1,\} \{0,3\} 备注:至少0次,必须要显示的写出来。 位置锚定: ^: 锚定行首,此字符后面的任意内容必须出现在行首 $: 锚定行尾,此字符前面的任意内容必须出现在行尾 ^$: 空白行 \<或\b: 锚定词首,其后面的任意字符必须作为单词首部出现 \>或\b: 锚定词尾,其前面的任意字符必须作为单词的尾部出现 分组: \(\) \(ab\)* 后向引用 \1: 引用第一个左括号以及与之对应的右括号所包括的所有内容 \2: \3:

可以看到标准正则表达的使用过程中,许多符号都需要转义,这在工作中带来了一定的不便,因此扩展的正则表达式便出现了。

二、拓展正则表达式 1. 字符匹配: . [abc]:包含abc任意一个字符 [^abc]:不包含abc任意一个字符 2. 次数匹配(不用再转义): *: ?: +: 匹配其前面的字符至少1次 {m,n} 3. 位置锚定: ^ $ \< \> 4. 分组(不用再转义): ():分组 \1, \2, \3, ... 5. 或者 |: or C|cat: C或cat(表示的是整个部分)

可以看到,使用扩展的正则表达式可以省略很多的转义符号,这尤其在写sed语句时极大的提高了代码的可读性。建议优先使用扩展的正则表达式。

三、grep命令家族 3.1. grep相关命令

grep命令家族由grep, egrep, fgrep 三个子命令组成,适用于不同的场景。具体如下:
命令 描述
grep 原生的grep命令,使用“标准正则表达式”作为匹配标准。
egrep 扩展的grep命令,相当于$(grep -E),使用“扩展正则表达式”作为匹配标准。
fgrep 简化版的grep命令,不支持正则表达式,但搜索速度快,系统资源使用率低。

3.2. 使用方法

语法
grep [options] PATTERN [FILE...]
options部分
-i:忽略大小写
--color:高亮匹配上的字符串
-v: 显示没有被模式匹配到的行
-o:只显示被模式匹配到的字符串
-E:使用扩展的正则表达式
PATTERN部分
以字符串的方式给定匹配模板,可以使用普通字符串以及正则表达式(标准&扩展)。
FILE部分
需要查找内容的文件。

四、sed命令 4.1. 概述

sed全称是Stream EDitor
sed是一个流编辑器、行编辑器

4.2 基本语法

sed [option] 'script' [input file]...
option部分
-n:不输出模式空间中的内容到stdout
-e:可以在sed命令中指定多个script脚本,多点编辑功能
-f:输入sed脚本,脚本中写着编辑命令
-r:支持使用扩展的正则
-i:直接编辑源文件

script部分
地址定界编辑命令(和vim命令相似)
1)空地址:全文编辑
2)单地址:
  #:指定某一行,对特定行进行编辑
  /pattern/:指定模式匹配到的那一行
3)地址范围:
  #,#
  #,+#
  #,/pattern/
  /pattern1/,/pattern2/
4)步进地址:
  1~2:以1为起始行,然后递进2行向下匹配
  2~2:所有偶数行
5)编辑命令:
  d:删除整行,d放在最后
  p:显示模式空间中的内容, 放在最后
  a:在匹配的行后面增加文本,使用\n支持多行追加。a放在定界后面
  i:在前面加文本。举例:sed '3i hello' xxx
  c:替换行为指定的文本。举例:sed '3c text' xxx 把第三行替换成text。sed -i '/xyz/c helloworld' num.txt
  w:保存模式空间中匹配的内容到指定位置。举例:sed -n '/^[^#]/w /tmp/demo' /etc/fstab 将/etc/fstab中非#开头的行保存到/tmp/demo中。
  r:读取指定文件的内容添加到当前文件匹配到的行后面,进行文件合并。
  !:条件取反。用法:地址定界!编辑命令。
  s///:条件替换。
替换标记备注:g(全局替换),p(显示替换成功的行)

替换举例:根据输入查找目录
echo "/var/log/messages" | sed 's@[^/]+$/?@@'

4.3.sed高级用法

模式空间与保持空间

Linux三剑客grep,sed,awk及使用介绍

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/11665.html