정규 표현식 뒤돌아보기는 따옴표를 무시합니다.

정규 표현식 뒤돌아보기는 따옴표를 무시합니다.

내 파일에 다음 문자열이 있고 다음 단어를 추출하고 싶습니다. -s즉, yesterday따옴표 없이:

-t -w -g london -s 'yesterday' -e 'yesterday' -f 100000"

원하는 출력

yesterday

내가 시도한 것

  • 첫 시도:

    grep -oP '(?<=\-s )\w*.*'
    

    이로 인해

    'yesterday' -e 'yesterday' -f 100000
    

    그러나 때로는 다음과 같은 결과를 얻을 수도 있습니다. 즉, 따옴표가 없거나 큰 따옴표도 포함되어 있습니다.

    -t -w -g london -s "yesterday" -e 'yesterday' -f 100000"
    -t -w -g london -s yesterday -e yesterday -f 100000"
    
  • 두 번째 시도:

    grep -oP '(?<=\-s )\w*'
    

    여기서는 출력에 작은따옴표만 표시됩니다.

위 상황을 어떻게 처리해야 할지 모르겠습니다.

답변1

LookBehind 정규식을 통해 따옴표(단일 또는 이중)가 있는 문자열을 추출하고 나중에 잘라내는 비교적 간단한 방법(GNU grep)

grep -oP -- '-s\s*\K([^ ]+)' file | tr -d \'\"

답변2

grep예제 입력이 제공된 대체(GNU):

-t -w -g london -s 'yesterday' -e 'yesterday' -f 100000"
-t -w -g london -s "yesterday" -e 'yesterday' -f 100000"
-t -w -g london -s yesterday -e yesterday -f 100000"
$ grep -oP "(?<=-s \"|-s '|-s )[^'\" ]*" file
yesterday
yesterday
yesterday

관련 정보