例えば
#comment
/etc/init.d/hogehoge
#comment
というファイルがあった時に/etc/init.d/hogehogeだけ表示するにはどうしたらよいでしょうか?
grepで出来そうかなとは思うのですが、パターンの書き方が分かりません。
$ 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 .....
...あまり、単純にならないですね。
お返事遅くなりました。回答ありがとうございます。
勉強になります。
前二者の複合的な感じですが。
grep -v '^[:space:]*#'
空行も省きたければ
egrep -v '^[:space:]*(#|$)'
こんな感じで出来た気がする。
egrepで\sは使えるんだっけ使えないんだっけ?
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/29 19:15:33