正则表达式和sed使用

文章目录

    • 一 正则表达式
    • 1.1 定义:
    • 使用单个字符串来描述,匹配一系列符合某个句法规则的字符串
    • 1.2正则表达式的分类:
    • 1.3 Linux中文本处理工具
    • 1.4 基础正则表达式元字符
      • 除了普通字符外,常见到以下元字符
  • 二 grep应用
    • 2.1 grep的使用规则:
    • 2.2 用法:
    • 2.3 基础正则表达式----元字符总结
        • 注意:只有连字符(-)在字符组内部,并且出现在两个字符之间时,才能表示子符的范围;如果出现在字符组的开头,则只能表示连字符本身
  • 三 sed应用
        • 注意:默认情况下所有的sed命令都是在模式空间内执行的,由此输入的文件并不会发生任何变化,除非是用重定向存储输出。
    • 3.1sed命令常见用法
    • 3.2常见的操作包括以下几种:
    • 使用
          • 迁移符合条件的文本
      • 注意:\n 和\r的区别:

一 正则表达式

1.1 定义:

使用单个字符串来描述,匹配一系列符合某个句法规则的字符串

  • 简单来说,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找,删除,替换某个特定的字符串。

  • 正则表达式是由普通字符与元字符组成文字模式。其中普通字符包括大小写字母,数字,标点符号及一些其他符号。

1.2正则表达式的分类:

正则表达式的字符串表达方法根据不同的严谨程度与功能分为基本正则表达式与扩展正则表达式。基础正则表达式是常用正则表达式最基础的部分。在Linux系统中常见的文件处理工具中grep 与sed 支持基础正则表达式,而egrep 与awk 支持扩展正则表达式。

1.3 Linux中文本处理工具

grep
egrep
sed
awk

1.4 基础正则表达式元字符

  • 基础正则表达式是常用的正则表达式部分

除了普通字符外,常见到以下元字符

:转义字符, (让具有特殊意义的元字符作为普通字符去使用)
例如:!(!),\n(换行)等

^:匹配字符串开始的位置 (以…开始)
例如:a,the,^#

: 匹 配 字 符 串 结 束 的 位 置 ( 以 . . . . 结 束 ) 例 如 : w o r d :匹配字符串结束的位置 (以....结束) 例如:word :....word

.:匹配除\n之外的任意的一个字符
例如:go.d,go…d (以g开头,d结尾,中间包括两个字符内容)

:匹配前面子表达式0次或者多次
例如:goo
d(god,good,goood…),go.*d(god,goad,gord…)

例如:go[ola]d,[abc],[a-z],[a-z0-9]

{n,m}:匹配前面的子表达式n到m次,有{n},{n,},{n,m}三种格式
例如:go{2}d(o出现2次),go{2,3}d(o出现至少2次,最多3次),go{2,}d(o出现2次或者2次以上)

二 grep应用

2.1 grep的使用规则:

-n:表示显示行号
-i:表示不区分大小写
-v:表示反向过滤
[ ]: 查找集合字符

2.2 用法:

  • 过滤包含the的内容
    [root@server2 ~]# grep -n ‘the’ test.txt

  • 过滤不包含the的内容
    [root@server2 ~]# grep -vn ‘the’ test.txt

  • 过滤以sh开头,以rt结尾,中间匹配i或o
    [root@server2 ~]# grep -n ‘sh[oi]rt’ test.txt

  • 过滤o出现2次和出现2次以上的
    [root@server2 ~]# grep -n ‘o{2}’ test.txt
    [root@server2 ~]# grep -n ‘o{2,}’ test.txt

  • 过滤oo前面不是w的内容和以不是w为开头的接着oo的内容

[root@server2 ~]# grep -n '[^w]oo' test.txt
[root@server2 ~]# grep -n '^[^w]oo' test.txt

2.3 基础正则表达式----元字符总结

^ :匹配输入字符串的开始位置。除非在方括号表达式中使用,代表不包含该字符集合。要匹配“^”字符本身,请使用“\”

$ :匹配输入字符串的结尾位置。如果设置了RegExp(正则表达式)对象的Multiline(多个)属性,则“$”也匹配‘\n’或‘\r’(换行)。
要匹配"$"字符本身,请使用“\$”

.:匹配除了“\n\r”之外的任何单个的字符

\:反斜杠,又叫转义字符,去除其紧跟的元字符或通配符的特殊意义。

*:匹配前面的子表达式零次或多次。要匹配“*”字符,请使用“\*”

[]:字符集合。匹配所包含的任意一个字符。例如,“[abc” 可以匹配“plain” 中的“a”

[^ ]:赋值字符集合。匹配未包含的一个任意字符。例如,“[^abc]”可以匹配“plain”中任何一个字母

[n1-n2]: 字符范围。匹配指定范围内的任意一个字符。例如,“[a-z]” 可以匹配“a”到“z”范围内的任意一个小写字母字符。

注意:只有连字符(-)在字符组内部,并且出现在两个字符之间时,才能表示子符的范围;如果出现在字符组的开头,则只能表示连字符本身

{n}: n是一个非负整数,匹配确定的n次。例如,“o{2}"不能匹配“Bob” 中的“o”,但是能匹配“food”中的“oo”

{n,}: n是一个非负整数,至少匹配n次。例如,“o{2,}”不能匹配“Bob” 中的“o”,但能匹配“fooood”中的所有o。

“o{1,}”等价于“o+”(至少出现1次)。“o{0,}”则等价于“o*"(至少出现0次)

{n,m}: m和n均为非负整数,其中n<=m, 最少匹配n次且最多匹配m次

grep一般多用于查找,检索内容,参数

三 sed应用

  • 默认情况下。所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。

  • 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。

在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

注意:默认情况下所有的sed命令都是在模式空间内执行的,由此输入的文件并不会发生任何变化,除非是用重定向存储输出。

3.1sed命令常见用法

sed   [选项]  ‘操作’  参数
sed   [选项]  -f   scriptfile  参数

3.2常见的操作包括以下几种:

a: 增加,在当前行下面增加一行指定内容
c:替换,将选定行替换为指定内容
d:删除,删除选定的行
i:插入,在选定行上面插入一行指定内容
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与“-n”选项一起使用。(输出)
s:替换,替换指定字符
y:字符转换

使用

  • 输出文件内容
    带行号输出所有内容 等同于 cat test.txt
    nl test.txt | sed -n ‘p’
  • 输出第4行,或者3到5行
[root@server2 ~]# nl test.txt | sed -n '4p'
[root@server2 ~]# nl test.txt | sed -n '3,5p
  • 输出偶数行;奇数行
[root@server2 ~]# nl test.txt | sed -n 'n;p'
[root@server2 ~]# nl test.txt | sed -n 'p;n'
  • 输出1到6行之间的偶数行,3到9行之间的奇数行
[root@server2 ~]# nl test.txt | sed -n '1,6{n;p}'
[root@server2 ~]# nl test.txt | sed -n '3,9{p;n}'
迁移符合条件的文本
  • 在使用sed命令迁移符合条件的文本时,常用到以下参数
H:复制到剪切板
g,G :将剪切板中的数据覆盖/追加至指定行
w:保存为文件
r:读取指定文件
a:追加指定内容
  • 在包含the的每行后插入一个新行,内容为New
    sed ‘/the/aNew’ test.txt
  • 在文件最后结尾后插入一个新行,内容为New
    sed ‘$aNew’ test.txt
  • 在第三行后插入一个新行,内容为New1,后换行插入一个新行,内容为new2
    sed ‘4aNew1\nnew2’ test.txt

注意:\n 和\r的区别:

\n 换行符,是另起一新行(光标换行)
\r 回车符,光标回到一旧行的开头(覆盖前一个)


你可能感兴趣的:(正则表达式,linux)