Bash: 텍스트 파일의 내용을 표시하고 각 단어의 발생을 강조 표시합니다.

Bash: 텍스트 파일의 내용을 표시하고 각 단어의 발생을 강조 표시합니다.

텍스트 파일의 내용을 표시하고 각 단어를 강조 표시하려면 어떻게 해야 합니까?

답변1

grep -C $(wc -l foo.txt | cut -d" " -f 1) --color word foo.txt

foo.txt는 파일 경로이고 는 word검색어입니다. 익숙하지 않은 경우 grep검색어는 실제로정규식. 순전히 영숫자라면 상관이 없지만 word일부 문자(예: [및 )는 ]정규 표현식에서 특별한 의미를 갖습니다. 문자 그대로 사용하려면 prefix 를 사용하세요 \. 게다가 이는 셸을 통과하므로 $이스케이프에 작동하지 않으면 흥미로운 작업을 수행합니다 \.

word따옴표로 묶으면 공백을 포함할 수 있습니다.

여기에 사용된 다른 명령은 POSIX 시스템(예: GNU/Linux)에 거의 항상 존재하는 wc및 입니다. 사용법을 설명하는 페이지가 cut있습니다 .man

답변2

를 사용하면 간단히 이 작업을 수행할 수 있습니다 grep. file.txt네 파일은 어디에 있고?word강조 표시하려는 텍스트입니다. 다음을 사용할 수 있습니다.

grep --color -E 'word|$' file.txt

이건 일치하고 하이라이트야word. 또한 각 줄 끝의 |빈 문자열( )을 일치시키고 강조 표시 할 수 있습니다. $그러나 문자열이 비어 있으므로 추가 텍스트가 실제로 강조표시되지 않습니다.

$제외하고 일치word목표는 모든 행에 일치 항목이 포함되도록 하는 것입니다. 그런 다음 , 또는 옵션 이 없거나 다른 유틸리티에 대한 호출이 grep없어도 모든 행을 인쇄합니다 .-A-B-C

-E플래그는 grep모드 인수를 다음과 같이 해석합니다.POSIX 확장 정규식(오히려). 안에 있는 캐릭터에 따라 다름word, 기본 정규 표현식(BRE)을 사용하도록 할 수 있습니다. 교대하는 것은 |공식적으로 POSIX 기본 정규 표현식의 일부는 아니지만 구현에서는 다음grep 을 사용하여 확장으로 지원하는 경우가 많습니다 \|.

grep --color 'word\|$' file.txt

특히 GNU/Linux 시스템에는 이를 지원하는 GNU Grep이 있습니다. 을 사용하는 경우 --color이 동작을 사용할 수도 있습니다.

이 명령은 다음 명령보다 간단합니다.골디락스의 대답. 그러나 이 답변의 기술은 일부 상황에서 분명한 이점을 가지고 있습니다. 여기서 메소드는 |및 를 사용하므로 $실제로는 고정 문자열이 아닌 정규식이어야 합니다. 그러나골디락스 접근법-F, 플래그를 추가할 수 있습니다 . 그런 다음 인용하는 word한 원하는 텍스트를 포함 할 수 있습니다.\word쉘이 grep수정되지 않은 채 전달되도록 올바르게 보장합니다.

예를 들어 다음을 사용할 수 있습니다.

grep --color -FC "$(wc -l < file.txt)" 'word' file.txt

자세한 내용은 다음을 참조하세요.일치하는 라인뿐만 아니라 모든 라인을 출력하도록 grep을 설득하십시오.(처럼강철 드라이버 제안).


1 ~표준(IEEE Std 1003.1-2008)교대가 ERE(를 통해)의 함수임을 지정 |하지만아니요BRE의 특징. 하지만구현이 허용됨\|원하는 대로 해석하세요. 많은 사람들이 이를 번갈아 해석합니다.

일부 구현에서는 BRE 구문을 확장하여 대체 항목을 추가합니다. 예를 들어, 하위 표현식 " "은 문자열 끝의 "" 또는 임의의 위치에 있는 "" \(foo$\|bar\)와 일치합니다 . 확장은 정의되지 않은 " " 시퀀스를 사용하여 트리거 됩니다.foobar\|

관련 정보