私は大規模なコードベースを模索しており、先頭の空白や集計は非常に煩わしいようです。それを取り除く方法はありますか?
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]*//'
出力から先頭の空白を削除します
1つのファイルでパターンre
(基本的な正規表現)を探していて、一致するすべての行から先頭の空白を削除するとします。
sed -n -e 's/^[[:blank:]]*//' -e '/re/p' thefile.c
(実際には、これは最初にすべての先行空白を取り除き、次にパターンを探しますが、結果は同じです)
代わりにgrep
出力を後処理するには(編集した質問のように):
grep re * | sed 's/:[[:blank:]]*/: /'
パターン [[:blank:]]*
は、ゼロ個以上のスペースまたはタブに一致します。