正则表达式

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 命令序列,包含一个或多个命令。每个命令可以是一个地址范围,后跟一个或多个操作。
  • 文件:要处理的文本文件。

常用选项:

  1. -n:禁止默认输出,只打印经过处理的行。
  2. -e:允许在脚本中使用多个命令。
  3. -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 命令序列,包含一个或多个命令。每个命令可以是一个地址范围,后跟一个或多个操作。
  • 文件:要处理的文本文件。

常用选项:

  1. -n:禁止默认输出,只打印经过处理的行。
  2. -e:允许在脚本中使用多个命令。
  3. -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

相关推荐
搬码后生仔3 分钟前
SQLite 是一个轻量级的嵌入式数据库,不需要安装服务器,直接使用文件即可。
数据库·sqlite
码农君莫笑4 分钟前
Blazor项目中使用EF读写 SQLite 数据库
linux·数据库·sqlite·c#·.netcore·人机交互·visual studio
江上挽风&sty6 分钟前
【Django篇】--动手实践Django基础知识
数据库·django·sqlite
奥顺互联V7 分钟前
一次性部署:使用Docker部署PHP应用
大数据·mysql·开源·php
向阳121810 分钟前
mybatis 动态 SQL
数据库·sql·mybatis
胡图蛋.11 分钟前
什么是事务
数据库
小黄人软件13 分钟前
20241220流水的日报 mysql的between可以用于字符串 sql 所有老日期的,保留最新日期
数据库·sql·mysql
张声录118 分钟前
【ETCD】【实操篇(三)】【ETCDCTL】如何向集群中写入数据
数据库·chrome·etcd
无为之士24 分钟前
Linux自动备份Mysql数据库
linux·数据库·mysql
小汤猿人类38 分钟前
open Feign 连接池(性能提升)
数据库