正则表达式不适用于 grep

Noi*_*oir 2 grep awk busybox regular-expression ash

我有一个这样的字符串

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

(结果来自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\)'

还返回空结果。

我觉得有点傻

gle*_*man 7

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

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

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/'
Run Code Online (Sandbox Code Playgroud)