大規模なコードベースを検索していますが、スペースやタブが前に表示されるのが面倒です。それを削除する方法はありますか?
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:]]*
ゼロ以上のスペースまたはタブと一致します。
最後にスペースの代わりにタブを挿入すると、:
要求されたインデントが均一に表示されます。
答え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