正则表达式

正则表达式是一种使用特定符号来描述具有共同特征的数据模式的工具。以下是正则表达式的基本和扩展概念:

1. 基本正则

  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • []:字符集合,匹配集合中的任意单个字符。
  • [ ^0-9 ]:取反字符集合,匹配不在0-9范围内的任意单个字符。
  • .:匹配任意单个字符。
  • *:匹配前一个字符任意次(包括零次)。
  • \{n,m\}:匹配前一个字符n到m次。
  • \{n\}:匹配前一个字符恰好n次。
  • \{n,\}:匹配前一个字符至少n次。
  • ():分组,将多个字符组合为一个单元,保留匹配结果。

2. 扩展正则

扩展正则提供了更强大的匹配功能,但需要注意的是,基本的grep命令不支持扩展正则,需要使用grep -Eegrep来支持:

  • +:至少匹配一次。
  • ?:最多匹配一次(即零次或一次)。
  • {n,m}:匹配前一个字符n到m次(与基本正则的\{n,m\}相同,但不需要转义)。
  • ():分组,与基本正则相同。
  • |:逻辑或,匹配两个或多个表达式中的任意一个。
  • \b:单词边界,匹配单词的开头或结尾。
  • .*:匹配任意字符任意次。

sed工具概述

sed是一个流式编辑器,用于非交互式地对文本进行增删改查等操作。它逐行处理文本,并将结果输出到屏幕。

用法

  • 用法1:前置命令 | sed [选项] '条件指令'
  • 用法2:sed [选项] '条件指令' 文件...(逐行执行)

选项

  • -n:屏蔽默认输出,仅输出经过处理的行。
  • -r:支持扩展正则表达式。
  • -i:直接修改源文件,而不是输出到标准输出。

条件和指令

  • 条件:可以是行号或正则表达式。没有指定条件时,默认对所有行执行命令。
  • 指令
  • p:打印当前行。
  • d:删除当前行。
  • s:替换当前行中的某个关键词。
  • a:追加文本到指定行之后。
  • i:插入文本到指定行之前。
  • c:替换整行文本。

示例

  • 追加文本:sed '2a xxx' 文件(在第二行之后追加"xxx")
  • 插入文本:sed '2i xxx' 文件(在第二行之前插入"xxx")
  • 替换整行:sed '2c xxx' 文件(将第二行替换为"xxx")