正则表达式不能与 grep 一起使用

正则表达式不能与 grep 一起使用

我有一个像这样的字符串

TEST="/dev/sda1 on /media/sda1 type vfat (rw,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=cp437,iocharset=iso8859-1,quiet)"

(结果来自mount | grep sda1

我想匹配安装点的地方。我的正则表达式(从这里采用) 是

(?<=on[ \t])(.*)(?=[ \t]type)

但由于某些原因,它不适用于我的多种工具(Busybox ash 1.14.2):

echo $TEST | grep -o -e '(?<=on[ \t])(.*)(?=[ \t]type)'

没有给我任何结果。

echo $TEST | awk 'match($0, /(?<=on )(.*)(?= type)/){print $0}'

返回错误awk: bad regex '(?<=on[ ])(.*)(?=[ ]type)': Invalid preceding regular expression

expr match "$TEST" '\(?<=on[ \t]\)\(.*\)\(?=[ \t]type\)'

也返回空结果。

我觉得自己有点傻。

答案1

环视是 Perl 正则表达式功能。 GNU grep 实现了它们(使用-P选项)。我不能说是否有任何 busybox 命令可以。

但在这种情况下,您只是在寻找“on”之后的工作。选择其中一项

echo "$TEST" | awk '{for (i=1; i<=NF; i++) if ($i == "on") {print $(i+1); break}}'
echo "$TEST" | sed 's/.*on[[:blank:]]\(.*\)[[:blank:]]type.*/\1/'

相关内容