不理解匹配整数的正则表达式模式

不理解匹配整数的正则表达式模式

https://www.gnu.org/software/sed/manual/sed.html#Command_002dLine-Options

-n
--quiet
--silent
-e script
--expression=script 将 script 中的命令添加到处理输入时要运行的命令集中。

https://stackoverflow.com/questions/14593320/insert-field-separator-to-arrange-and-capture-value-in-variable-in-shell-script/14593411#14593411

就像这个答案:

echo $'For example:\nThis is counter1 1000\nthis counter2 2000\n
     this counter3 is higher value 3000\ndone.\n' |
  sed -ne 's/^.* \([0-9]\{1,99\}\)/\1/p'

我理解([0-9]\{1,99\}\)指的是模式整数。
^引用字符串的开头。
.*指 1 个或多个字符。

但总的来说,我仍然感到困惑 sed -ne 's/^.* \([0-9]\{1,99\}\)/\1/p'

答案1

(首先,这不是 bash 整数正则表达式模式。sed正在处理正则表达式,与 bash 无关)

所以我知道你无法弄清楚中的正则表达式sed -ne 's/^.* \([0-9]\{1,99\}\)/\1/p'

让我们把事情变得更简单。等效的代码是sed -E -ne 's/^.* ([0-9]{1,99})/\1/p'

启用-E扩展(现代)正则表达式,您不必使用转义内容\

s/pattern/replacement/运算符在左侧查找与正则表达式模式匹配的字符串,并将其替换为右侧的字符串。

现在,让我们重点关注/^.* ([0-9]{1,99})/

  • ^匹配行首
  • .*匹配任意字符 0 次或多次
  • (space) 匹配单个空格字符
  • [0-9]{1,99}匹配出现次数最少 1 次到最多 99 次的任何数字;所以长度为 1 到 99 的任何数字

([0-9]{1,99})位于括号中,这意味着 sed 将“捕获”该子字符串并将其用于所\1使用的替换部分。

相关内容