![정규식은 grep과 함께 사용할 수 없습니다.](https://linux55.com/image/53492/%EC%A0%95%EA%B7%9C%EC%8B%9D%EC%9D%80%20grep%EA%B3%BC%20%ED%95%A8%EA%BB%98%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
나는 이런 문자열을 가지고있다
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/'