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

나는 큰 코드베이스를 통해 greping하고 있으며 공백과 표의 선행은 상당히 성가신 것 같습니다. 그것을 제거 할 수있는 방법이 있습니까?

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



답변

테스트 파일 작성

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


답변

당신은 그들을 사용하여 그들을 제거 할 수 있습니다 sed

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

출력에서 선행 공백을 제거합니다.


답변

re하나의 파일에서 패턴 (기본 정규 표현식)을 찾고 있다고 가정 하고 일치하는 모든 행에서 선행 공백을 제거하려고합니다.

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

(실제로, 이것은 모든 선행 공백을 먼저 제거한 다음 패턴을 찾습니다. 그러나 결과는 같습니다)

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

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

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


답변

sed -n ‘/ pattern / p’파일 | sed -r “s / \ s + // g”


답변