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