用户工具

站点工具


linux:正则表达式

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
linux:正则表达式 [2022/12/28 11:37] – [1.2 匹配非] zhangguolinux:正则表达式 [2026/10/13 22:51] (当前版本) – 外部编辑 127.0.0.1
行 1: 行 1:
-====== - 正则表达式 ======+# - 正则表达式
 参考book: The Linux Command Line 参考book: The Linux Command Line
  
行 8: 行 8:
 POSIX Basic Vs. Extended Regular Expressions叫做ERE, -- egrep使用的, grep -E也是一样。 POSIX Basic Vs. Extended Regular Expressions叫做ERE, -- egrep使用的, grep -E也是一样。
  
-===== - BRE ===== +## - BRE
- +
 ERE和BRE都支持以下符号: ERE和BRE都支持以下符号:
   ^ $ . [ ] *   ^ $ . [ ] *
行 16: 行 14:
 上面这几个符号默认当特殊功能符号,如果需要匹配这些符号,需要在前面加\转义。 上面这几个符号默认当特殊功能符号,如果需要匹配这些符号,需要在前面加\转义。
  
-==== - 正常匹配 ====+### - 正常匹配
  
-<code bash>+```bash
  
 $ echo "haha [i889" | grep "\[i"   # 使用\[来匹配[符号 $ echo "haha [i889" | grep "\[i"   # 使用\[来匹配[符号
行 62: 行 60:
 $ echo "haha i89" | grep "\<i89\>" $ echo "haha i89" | grep "\<i89\>"
 haha i89 haha i89
 +```
  
  
  
 +### - 匹配非
  
- +```bash
-</code> +
- +
- +
-==== - 匹配非 ==== +
- +
-<code bash>+
 $ echo "haha [i8899" | grep "[^89]"   # 匹配除8和9之外的所有字符 $ echo "haha [i8899" | grep "[^89]"   # 匹配除8和9之外的所有字符
 haha [i8899 haha [i8899
  
 像这种情况下,匹配到的是haha [i, 当前行还是被匹配到的。如果不想匹配带89的行,需要在grep的参数加上-v选项。 像这种情况下,匹配到的是haha [i, 当前行还是被匹配到的。如果不想匹配带89的行,需要在grep的参数加上-v选项。
-</code>+```
  
  
-==== - grep选中不匹配的行 ====+ 
 +### - grep选中不匹配的行
 grep -v选项的解释 grep -v选项的解释
-<code>+ 
 +```
        -v, --invert-match        -v, --invert-match
               Invert the sense of matching, to select non-matching lines.  (-v is specified by POSIX.)               Invert the sense of matching, to select non-matching lines.  (-v is specified by POSIX.)
-</code>+```
  
-<code bash> 
-$ echo "haha [i8899" | grep -v "89"    #  echo中带有89, grep使用了-v参数,所以该行不会被匹配到。 
  
-</code> 
  
-===== - ERE增强 =====+```bash 
 +$ echo "haha [i8899" | grep -v "89"    #  echo中带有89, grep使用了-v参数,所以该行不会被匹配到。 
 +```
  
  
 +## - ERE增强
 ERE支持BRE的所有规则,另外ERE比BRE多添加了对以下符号的支持: ERE支持BRE的所有规则,另外ERE比BRE多添加了对以下符号的支持:
   ( ) { } ? + |   ( ) { } ? + |
行 100: 行 96:
 注意:ERE多的这几个符号默认是当做特殊功能字符,如要其要被当前普通字符被匹配,需要在其前面加\进行转义。 注意:ERE多的这几个符号默认是当做特殊功能字符,如要其要被当前普通字符被匹配,需要在其前面加\进行转义。
  
-<code bash>+ 
 +```bash
  
 $ echo "haha [i889" | grep -E "(88)"   # 匹配88, ()只起限定范围的使用 $ echo "haha [i889" | grep -E "(88)"   # 匹配88, ()只起限定范围的使用
行 115: 行 112:
 $ echo "haha) [i889" | grep -E "haha\)"   # 匹配)符号 $ echo "haha) [i889" | grep -E "haha\)"   # 匹配)符号
 haha) [i889 haha) [i889
 +```
  
  
-</code> 
  
  
-<code>+```
 {n} Match the preceding element if it occurs exactly n times. {n} Match the preceding element if it occurs exactly n times.
 {n,m} Match the preceding element if it occurs at least n times, but no  {n,m} Match the preceding element if it occurs at least n times, but no 
行 126: 行 123:
 {n,} Match the preceding element if it occurs n or more times. {n,} Match the preceding element if it occurs n or more times.
 {,m} Match the preceding element if it occurs no more than m times. {,m} Match the preceding element if it occurs no more than m times.
-</code>+``` 
 + 
 + 
 + 
 + 
 + 
 +## - sed命令 
 + 
 +```bash 
 + 
 +sed 's/regexp/replacement/' distros.txt 
 + 
 +# regexp expand方式的匹配,可以理解为ERE 
 +sed -r 's/(regexp)/new_\1' distros.txt 
 + 
 +# 和上面效果一样,是普通的regexp, 可以理解为BRE 
 +sed 's/\(regexp\)/new_\1/' distros.txt 
 + 
 + 
 +# -i, 将替换后的结果写回原文件中 
 +sed -i 's/\(regexp\)/new_\1/' distros.txt 
 +``` 
 + 
 + 
  
linux/正则表达式.1672198656.txt.gz · 最后更改: (外部编辑)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki