1. 基本字符匹配:
普通字符:
大多数字符在正则表达式中表示它们自身。例如,a 将匹配字符串中的字母 "a"。
点号(.):
点号 . 表示匹配任意一个字符(除了换行符 \n)。例如,a. 可以匹配 "ab"、"ac" 等。
2. 字符类:
[ ]:
字符类用于匹配括号内的任意一个字符。例如,[abcd] 匹配任何一个字母。
反向字符类 [^ ]:
反向字符类匹配除括号内字符之外的任意一个字符。例如,[^0-9] 匹配任何一个非数字字符。
3. 重复和数量词:
星号(*):
* 表示匹配前面的元素零次或多次。例如,ab*c 可以匹配 "ac"、"abc"、"abbc" 等。
加号(+):
+ 表示匹配前面的元素一次或多次。例如,ab+c 可以匹配 "abc"、"abbc" 等,但不能匹配 "ac"。
问号(?):
? 表示匹配前面的元素零次或一次。例如,ab?c 可以匹配 "ac"、"abc"。
花括号({n,m}):
花括号 {n,m} 表示匹配前面的元素至少 n 次,至多 m 次。例如,a{2,4} 可以匹配 "aa"、"aaa"、"aaaa"。
4. 锚点和边界:
^ :
^ 表示匹配字符串的开头。当它位于正则表达式的开始位置时,它指示匹配的内容必须在字符串的开头。例如:
^abc:匹配以 "abc" 开头的字符串。^[\d]+:匹配以一个或多个数字开头的字符串。
$ :
$ 表示匹配字符串的结尾。当它位于正则表达式的末尾时,它指示匹配的内容必须在字符串的结尾。例如:
abc$:匹配以 "abc" 结尾的字符串。[a-z]+$:匹配以小写字母结尾的字符串。
^ 和 $ 结合使用:
^ 和 $ 也可以结合使用,表示整个字符串必须匹配模式。例如:
^start.*end$:匹配以 "start" 开头,以 "end" 结尾的整个字符串。
\b:
\b 表示单词边界。例如,\bword\b 可以匹配 "word",但不能匹配 "password"。
5. 转义字符:
\ 是转义字符,用于取消特殊字符的特殊含义。例如,\. 匹配点号而不是任意字符。
6. 分组和捕获:
( ):
( ) 用于创建一个捕获组,以便对匹配的部分进行分组。例如,(ab)+ 可以匹配 "ab"、"abab" 等。
7. 字符转义和元字符:
一些字符在正则表达式中具有特殊含义,如 *、+、? 等。如果想匹配这些字符本身,需要使用 \ 进行转义。例如,a\*b 可以匹配 "a*b"。
8. 选择操作符:
|:
| 表示逻辑或,匹配两边任意一个表达式。例如,cat|dog 可以匹配 "cat" 或 "dog"。
sed
sed [选项] '脚本' 文件
选项:可选,用于控制sed命令的行为。'脚本':是由单引号括起来的sed命令序列,包含一个或多个命令。每个命令可以是一个地址范围,后跟一个或多个操作。文件:要处理的文本文件。
常用选项:
-n:禁止默认输出,只打印经过处理的行。-e:允许在脚本中使用多个命令。-f script-file:从文件中读取sed脚本。
脚本格式:
sed 脚本由一个或多个命令组成,每个命令由一个地址范围和一个或多个操作组成。
[地址范围] 动作
-
地址范围:用于指定命令作用的行范围。 -
动作:是sed执行的操作,如替换、删除、打印等。# 替换行中的"apple"为"orange" sed 's/apple/orange/' file.txt # 在第3行后面插入一行 sed '3a\ This is a new line' file.txt # 删除包含"banana"的行 sed '/banana/d' file.txt # 打印第5行到第10行 sed -n '5,10p' file.txt # 使用多个命令 sed -e '/pattern1/s/old/new/' -e '/pattern2/d' file.txt在脚本中,多个命令可以使用
-e选项分隔。每个命令都按照顺序执行,影响文件的每一行。
sed 命令的基本语法如下:
sed [选项] '脚本' 文件
选项:可选,用于控制sed命令的行为。'脚本':是由单引号括起来的sed命令序列,包含一个或多个命令。每个命令可以是一个地址范围,后跟一个或多个操作。文件:要处理的文本文件。
常用选项:
-n:禁止默认输出,只打印经过处理的行。-e:允许在脚本中使用多个命令。-f script-file:从文件中读取sed脚本。
脚本格式:
sed 脚本由一个或多个命令组成,每个命令由一个地址范围和一个或多个操作组成。基本格式如下:
[地址范围] 动作
地址范围:用于指定命令作用的行范围。动作:是sed执行的操作,如替换、删除、打印等。
示例脚本:
# 替换行中的"apple"为"orange" sed 's/apple/orange/' file.txt # 在第3行后面插入一行 sed '3a\ This is a new line' file.txt # 删除包含"banana"的行 sed '/banana/d' file.txt # 打印第5行到第10行 sed -n '5,10p' file.txt # 使用多个命令 sed -e '/pattern1/s/old/new/' -e '/pattern2/d' file.txt
在脚本中,多个命令可以使用 -e 选项分隔。每个命令都按照顺序执行,影响文件的每一行。
地址范围:
地址范围指定命令的作用范围。它可以是单个行号、正则表达式、行号范围、以及与逻辑关系的组合。一些常见的地址范围:
n:第 n 行。m,n:从第 m 行到第 n 行。/pattern/:匹配包含模式的行。/pattern1/,/pattern2/:匹配包含模式1到模式2之间的行。
动作:
sed 动作是对地址范围内的行执行的操作。一些常见的动作:
-
s/old/new/:替换行中的文本。 -
a\:在匹配行后追加文本。 -
i\:在匹配行前插入文本。 -
d:删除匹配的行。 -
p:打印匹配的行。将文件中所有的"apple"替换为"orange"
sed 's/apple/orange/g' file.txt
在以"cherry"开头的行后面插入一行
sed '/^cherry/a
This is a new line' file.txt删除包含"date"的行
sed '/date/d' file.txt
打印包含"banana"的行
sed -n '/banana/p' file.txt
将第2行到第5行的文本替换为"New Text"
sed '2,5s/.*/New Text/' file.txt