https://www.gnu.org/software/sed/manual/sed.html#Command_002dLine-Options
-n
--quiet
--silent
-e script
--expression=script 将 script 中的命令添加到处理输入时要运行的命令集中。
就像这个答案:
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
使用的替换部分。