텍스트 구조에 영향을 주지 않고 단어 강조 표시

텍스트 구조에 영향을 주지 않고 단어 강조 표시
$cat contents.txt

cat-1.15

cat-1.15

cat-1.15
cat-1.18

위 출력에는 빈 줄이 있습니다.

$cat contents.txt | grep cat cat이라는 단어가 강조 표시되지만 결과 텍스트도 병합되어 빈 줄이 제거됩니다.

cat-1.15
cat-1.15
cat-1.15
cat-1.18

유일한 차이점이 강조 표시된 grep 용어가 되도록 텍스트 구조에 영향을 주지 않고 어떻게 강조 표시를 할 수 있습니까?

답변1

GNU grep을 사용하면 옵션을 통해 이 작업을 수행할 수 있습니다 -z.

-z, --빈 데이터

입력 및 출력 데이터를 일련의 줄로 처리합니다. 각 줄은 개행 문자 대신 0바이트(ASCII NUL 문자)로 끝납니다. -Z 또는 --null 옵션과 마찬가지로 이 옵션은 sort -z와 같은 명령과 함께 사용하여 임의의 파일 이름을 처리할 수 있습니다.

이것은 또한우루무치대학교. grep을 사용하여 입력 파일을 지정할 수 있습니다.

$ grep --color cat contents.txt
cat-1.15
cat-1.15
cat-1.15
cat-1.18
$ grep --color -z cat contents.txt
cat-1.15

cat-1.15

cat-1.15
cat-1.18

답변2

또 다른 가능한 해결책은 두 가지 패턴을 제공하는 것입니다 grep. 하나는 검색할 실제 패턴 또는 용어이고, 두 번째는 빈 문자열입니다.

$ grep --color -e 'cat' -e '' testfile.txt
cat-1.15

cat-1.15

cat-1.15
cat-1.18

-e옵션은 여러 모드를 지정하는 데 사용됩니다. 매뉴얼에서:

-e PATTERN,--regexp=PATTERN

패턴으로 PATTERN을 사용합니다. 여러 검색 패턴을 지정하거나 하이픈(-)으로 시작하는 패턴을 보호하는 데 사용할 수 있습니다. ( -ePOSIX에서 지정)

원하는 경우 이러한 패턴을 단일 확장 정규식으로 결합할 수도 있습니다.

$ grep --color -E 'cat|' testfile.txt
cat-1.15

cat-1.15

cat-1.15
cat-1.18

또한 여러 키워드를 강조 표시해야 하는 경우 목록에 다른 모드를 추가하면 됩니다.

답변3

grep에는 더 많은 가능성이 있습니다.

grep은 다음의 인스턴스를 0개 이상 찾습니다 cat.

grep --color '\(cat\)*' contents.txt

그렙cat 또는빈 문자열:

grep -E --color 'cat|' contents.txt

(-E는 확장 정규식 구문을 지정합니다. egrep여기서 대신 사용할 수 있습니다 grep -E.)


아니면 당신은 사용할 수 있습니다sed수동 채색 사용ANSI 이스케이프 코드:

red='\c[[1;31m'
default='\c[[0m'
sed "s/cat/${red}cat${default}/g" contents.txt

쉘 변수는 편의를 위해서만 여기에 red있습니다 . 해당 값은 sed 표현식에 인라인으로 배치될 수도 있습니다.default

답변4

다음 명령을 사용해 보았습니다.

sed -r "/cat/{N;s/^$/&=/}" filename


awk '{if(((length($1)>3)&& ($1 ~ /cat/))||($0~/^$/)){print $0}}' filename

관련 정보