정규식은 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

Lookaround는 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/'

관련 정보