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\)'
还返回空结果。
我觉得有点傻
环视是 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)