私はこのような文字列を持っています
_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\)'
また、空の結果を返します。
ちょっとバカだな。
ルックアラウンドは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/'