나는 큰 코드베이스를 통해 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”