grep을 사용하여 단어가 아닌 문자로 시작하는 단어 검색

grep을 사용하여 단어가 아닌 문자로 시작하는 단어 검색

test.txt 파일의 내용은 다음과 같습니다.

ls -a
cmake --verbose
verbose

grep이 파일을 보고 "--"로 시작하는 단어(예: "--verbose")만 찾고 싶습니다.

그러나 다음 패턴을 매개변수로 사용하면 grep작동하지 않습니다.

$ cat testing.txt | grep -- 
Usage: grep [OPTION]... PATTERN
   [FILE]... Try 'grep --help' for more information.

$ cat testing.txt | grep -
ls -a
cmake --verbose

$ cat testing.txt | grep '--v'
grep (GNU grep) 3.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.

$ cat testing.txt | grep ver
cmake --verbose
verbose

$ cat testing.txt | grep '-ver'
ls -a
  • grepa로 시작하는 모든 매개변수가 --옵션이라고 생각하시나요? grep이 "--"로 시작하는 패턴(파일에서)을 검색할 수 있도록 이 문제를 방지하려면 어떻게 해야 합니까?
  • 마지막 시도는 "-ver" 패턴을 사용하여 이루어졌으므로 grep해당 패턴은 옵션으로 간주되지 않았지만 grep"-ver" 패턴이 포함되어 있음에도 불구하고 파일의 "--verbose" 단어와 일치하지 않았습니다. 이 동작의 원인은 무엇입니까?

답변1

이 문자열은 --명령줄에 나타날 때 대부분의 유틸리티에 특별합니다. 그것은 신호를 보낸다옵션 끝명령줄 인수 파서에. 예를 들어 현재 디렉터리에서 호출된 파일을 rm -- -f삭제하기 위해 대시로 시작하는 파일 이름을 전달하려는 경우에 사용됩니다 .-f

--패턴으로 사용하려면 grep유틸리티에 패턴임을 명시적으로 알려주세요.

grep -e --

옵션은 검색하려는 패턴 -e인 옵션 인수를 허용합니다 .grepgrep

당신은 또한 사용할 수 있습니다

grep -- --

여기서 grep두 번째는 첫 번째가 옵션이 될 수 없다고 --해서 모드라고 알려졌습니다.--


ls -a파일의 행에 가 포함되어 있지 않기 때문에 마지막 파이프가 반환됩니다 r. 이 명령은 " ( ) 와 일치하지 않는 모든 행 추출 " grep -ver로 작성할 수도 있습니다 .grep -v -e r-vr-e r

답변2

제목의 질문에 답하려면(일부 정규식 엔진에서는 영숫자 또는 밑줄로 시작하지 않는 공백으로 구분된 단어 보고 ) PCRE를 사용하여 빌드를 지원하는 경우 \wGNU로 수행할 수 있습니다. grep:

grep -Po '(?<!\S)[^\w\s]\S*'

^이는 공백 이 아닌 문자( )가 앞에( ) 없고 공백이 아닌 문자( )가 뒤에 오지 않는 경우( ) 단어 1( ) 또는 공백 문자( ) \w이외의 문자( ) 입니다 .\s(?<!...)\S*\S

입력한 내용은 다음과 같이 반환됩니다.

-a
--verbose

답변3

이 문제는 다음과 같이 해결할 수 있습니다 GNU grep.positive lookarounds

 $ grep -oP '(?:(?!\h)\W)+\w+' inp

그것을 읽으면서 문자열의 내 위치에서 단어가 아닌 단어가 뒤따르는 것을 봅니다. 그러나 이 비단어는 공백을 제외합니다.

산출:

 -a
 --verbose

관련 정보