Linux 用sed提取数字
输入 塞德 期望输出Linux 用sed提取数字,linux,bash,sed,zsh,Linux,Bash,Sed,Zsh,输入 塞德 期望输出 $ fd . ./ -t f | sed -E 's/.*\([0-9]\{1,6\}\).*/\1/' sed: -e expression #1, char 26: invalid reference \1 on `s' command's RHS 还有别的办法吗?我一整天都在努力让它工作…你可以用这个sed: sed-E的/^[^0-9]*([0-9]{1,6})。*/\1/'文件 201909 202012 202012 201903 201903 2019
$ fd . ./ -t f | sed -E 's/.*\([0-9]\{1,6\}\).*/\1/'
sed: -e expression #1, char 26: invalid reference \1 on `s' command's RHS
还有别的办法吗?我一整天都在努力让它工作…你可以用这个
sed
:
sed-E的/^[^0-9]*([0-9]{1,6})。*/\1/'文件
201909
202012
202012
201903
201903
201903
201903
202003
正则表达式解释:
:启用扩展程序正则表达式模式(ERE)-E
:开始^
:匹配0个或更多非数字[^0-9]*
:在第一个捕获组中匹配1到6个数字([0-9]{1,6})
:匹配0个或更多字符*
-E
使sed
将正则表达式视为POSIX ERE,但它遵循的语法是POSIX BRE的语法*
匹配,下一个数字匹配模式始终只匹配一个数字,因为它可以匹配一个数字sed-n的/[^0-9]*\([0-9]\{6\}\)./\1/p'
看到哪里了吗
抑制默认行输出-n
匹配零个或多个字符(数字除外),然后将6个数字精确捕获到组1中,然后匹配字符串的其余部分,然后[^0-9]*\([0-9]\{6\}*)。
-将整个匹配项替换为组1值\1
-打印替换结果p
$ fd . ./ -t f | sed -E 's/.*\([0-9]\{1,6\}\).*/\1/'
sed: -e expression #1, char 26: invalid reference \1 on `s' command's RHS
...
...
201909
202012
202012
201903
201903
201903
201903
202003
...
...