공백 없이 grep하는 방법은 무엇입니까?

공백 없이 grep하는 방법은 무엇입니까?

대규모 코드베이스를 검색하고 있는데 공백과 탭이 앞에 표시되는 것이 짜증나는 것 같습니다. 그것을 제거하는 방법이 있습니까?

grep -R "something" ./

예를 들면 다음과 같습니다.

foo/bar.cpp:                       qwertyuiosomethingoi
foo/bar/baz.h:                          43rfsgsomethingdrfg
bar/bar.cpp:            1234edwssomethingczd

나는 다음과 같은 것을 얻고 싶습니다 :

foo/bar.cpp: qwertyuiosomethingoi
foo/bar/baz.h: 43rfsgdsomethingrfg
bar/bar.cpp: 1234edwssomethingczd

또는 더 나은:

foo/bar.cpp:   qwertyuisomethingooi
foo/bar/baz.h: 43rfsgdrsomethingfg
bar/bar.cpp:   1234edwssomethingczd

답변1

다음을 사용하여 제거할 수 있습니다.sed

grep blah filename.foo | sed -e 's/^[ \t]*//'

그러면 출력에서 ​​선행 공백이 제거됩니다.

답변2

re파일에서 패턴(기본 정규 표현식)을 찾고 있고 일치하는 모든 줄에서 선행 공백을 제거한다고 가정해 보겠습니다 .

sed -n -e 's/^[[:blank:]]*//' -e '/re/p' thefile.c

(실제로 이것은 먼저 모든 선행 공백을 제거한 다음 패턴을 찾지만 결과는 동일합니다)

grep편집된 질문에서와 같이 출력을 사후 처리하려면 다음을 수행하십시오 .

grep -e 're' -- * | sed 's/:[[:blank:]]*/: /'

이 패턴은 [[:blank:]]*0개 이상의 공백이나 탭과 일치합니다.

끝에 공백 대신 탭을 삽입하면 :요청한 들여쓰기가 균일하게 표시됩니다.

답변3

테스트 파일 생성

echo -e "\t   foo-somethingfoo" >something.foo
echo "    bar-bar-somethingbar" >something.bar_bar
echo "baz-baz-baz-somethingbaz" >something.baz_baz_baz
echo "  spaces    something  s" >something.spaces

화사한 컬러를 연출해줍니다 :)

grep --colour=always "something" something.* | 
 sed -re  's/^([^:]+):(\x1b\[m\x1b\[K)[[:space:]]*(.*)/\1\x01\2\3/' |
   column -s $'\x01' -t

출력(색상을 얻으려면 실행).

something.bar_bar      bar-bar-somethingbar
something.baz_baz_baz  baz-baz-baz-somethingbaz
something.foo          foo-somethingfoo
something.spaces       spaces    something  s

테스트 대상 gnome-terminal: , konsole, terminator,xterm

관련 정보