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