Posted at

grepでコメント行および空白行を削除する

More than 5 years have passed since last update.


grep で#で始まるコメント行および空白行を削除する

$ grep -v '^\s*#' filename |grep -v '^\s*$'

もしくは

$ grep -v -e '^\s*#' -e '^\s*$' filename


簡単な解説


  • grep の -v オプションは除外を意味します。

  • 正規表現で ^ は行頭を表します。

  • 正規表現の \s は空白文字を表し、^\s* は行頭から0回以上繰り返しの空白を意味します。
    そのため、\s*# と書くと # から始まるコメント行(#より前には空白がいくつあっても良い)にマッチします。

  • 正規表現の $ は行末を表します。^\s*$ だと空白のみの行にマッチします。


実行例

$ vim /tmp/greptest.rb


/tmp/greptest.rb

#=========================

# ここのコメントは除去されます
#=========================
class Hoge

# このコメントも除去されます
def hello
puts "Hello, World!" # ここのコメントは除去されません
end

end

# このコメントは除去されます
hoge = Hoge.new
hoge.hello
#=> Hello, World! # これも除去されます


このようなファイルがあるとき、

$ grep -v -e '^\s*#' -e '^\s*$' /tmp/greptest.rb

を実行すると、

class Hoge

def hello
puts "Hello, World!" # ここのコメントは除去されません
end
end
hoge = Hoge.new
hoge.hello

という結果が返ってきます。