人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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


●質問者: koime_ryokutya
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● JULY
$ 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
.....

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


koime_ryokutyaさんのコメント
お返事遅くなりました。回答ありがとうございます。 勉強になります。

2 ● hissssa
ベストアンサー

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

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


koime_ryokutyaさんのコメント
回答ありがとうございます。

3 ● TransFreeBSD

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

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

空行も省きたければ

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

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


rouge_2008さんのコメント
文字化けしてしまったので書き直して投稿しています。 「[[:space:]]」(※[]は実際は半角)としなければならないようです・・・ >|| grep -v '^[[:space:]]*#' ||< http://www.kt.rim.or.jp/~kbk/regex/regex.html#CLASSNAME >> これらは実際に使用するときには:lower:?のような形になります (ブラケットが二重になることに注意してください)。 <<

rouge_2008さんのコメント
> egrepで\sは使えるんだっけ使えないんだっけ? 使えないようです。 http://www.kt.rim.or.jp/~kbk/regex/regex.html#EGREP 「\s」はgrepに-Pオプションを指定すれば使用できますが・・・ Perl互換の正規表現の方が連続する空行も取り除かれるようです。 >|| grep -v -P '^\s*#' ||< --help >> Regexp selection and interpretation: -E, --extended-regexp PATTERN is an extended regular expression (ERE) -F, --fixed-strings PATTERN is a set of newline-separated fixed strings -G, --basic-regexp PATTERN is a basic regular expression (BRE) -P, --perl-regexp PATTERN is a Perl regular expression -e, --regexp=PATTERN use PATTERN for matching <<

TransFreeBSDさんのコメント
[:space:]はその通りですね。[[:space:][:alpha:]]とか出来ないといけませんし。 あと「\s」は、なんか使ってた気がしたけどFreeBSDでは出来ました。GNU grepには違いないけどパッチかなにか当たってるのかな? >|| grep (GNU grep) 2.5.1-FreeBSD ||<

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で空行の扱いも同じでした。 一応両方で試して確認するといいかもしれません。

koime_ryokutyaさんのコメント
回答ありがとうございます。 色々オプションで工夫出来るのですね。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ