我有一个像这样的字符串
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/'