Linuxでコメントアウト以外の行だけ表示したい。


例えば
#comment
/etc/init.d/hogehoge
#comment
というファイルがあった時に/etc/init.d/hogehogeだけ表示するにはどうしたらよいでしょうか?
grepで出来そうかなとは思うのですが、パターンの書き方が分かりません。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/12/28 10:35:03

ベストアンサー

id:hissssa No.2

回答回数428ベストアンサー獲得回数129

grepの-vオプションで一発だと思いますが・・・

# grep -v ^# (ファイル名)

id:koime_ryokutya

回答ありがとうございます。

2011/12/29 19:15:33

その他の回答2件)

id:JULY No.1

回答回数966ベストアンサー獲得回数247

$ sed 's/#.*$//' /etc/sysctl.conf



net.ipv4.ip_forward = 0


net.ipv4.conf.default.rp_filter = 1
......

と、これだと空行が残ります。

空行を削るのであれば、

$ sed 's/#.*$//' /etc/sysctl.conf | grep -v '^$'
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
......

となります。

追記:
awk なら一発でできるかな、と思って試してみました。

$ awk '{ str = sub(/#.*$/, "", $0); if (length($0) > 0) print $0;}' /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
.....

...あまり、単純にならないですね。

id:koime_ryokutya

お返事遅くなりました。回答ありがとうございます。
勉強になります。

2011/12/29 19:11:33
id:hissssa No.2

回答回数428ベストアンサー獲得回数129ここでベストアンサー

grepの-vオプションで一発だと思いますが・・・

# grep -v ^# (ファイル名)

id:koime_ryokutya

回答ありがとうございます。

2011/12/29 19:15:33
id:TransFreeBSD No.3

回答回数668ベストアンサー獲得回数268

前二者の複合的な感じですが。

grep -v '^[:space:]*#'

空行も省きたければ

egrep -v '^[:space:]*(#|$)'

こんな感じで出来た気がする。
egrepで\sは使えるんだっけ使えないんだっけ?

他3件のコメントを見る
id:rouge_2008

Ubuntu 11.04ではGNU grep 2.6.3でしたが、grepでもegrepでも\sが使用できました。
コメントした時はWindowsのGNU grep 2.5.4(GnuWin32からダウンロード)で確認していて、ページの説明通りの動作なので気がつきませんでした・・・
通常、linux付属のgrepでは対応しているのでしょうか?(^^;
一応manで確認しましたが、\sは含まれていませんでした。
簡単に見ただけですが・・・

※それから、[:space:]と\sで空行の扱いも同じでした。
一応両方で試して確認するといいかもしれません。

2011/12/22 03:23:28
id:koime_ryokutya

回答ありがとうございます。
色々オプションで工夫出来るのですね。

2011/12/29 19:14:08
  • id:JULY
    hissssa さんや TransFreeBSD さんの例だと、行末にあるコメントは削除されないですよね。
    質問文の要件としては、「コメントのみの行が表示されない」かもしれないので、それでも OK なのかなぁ、と思いながら、

    -----------------------------------------------------------------
    net.ipv4.ip_forward = 0 # IPv4 のルーティングは無効
    -----------------------------------------------------------------

    という記述の時に、このコメント部分は不要だろう、と思って回答しました。

    ... と書いている間に、TransFreeBSD さんの回答を見て、自分の回答だと、空白のみの行が残ってしまう事に気が付きました。

    grep -v で取り除く時のパターンを「grep -v '^[:space:]*$'」とした方が、良かったかもしれませんね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません