「#」または「;」で始まらない行をgrepする方法は?


78

grepしてsmb.conf、コメントされていない行のみを表示します。


1
testparmこれもデフォルト値を表示するため、より適切に行います。
F.ハウリ

@ F.Hauriありがとう。同様に機能しています。しかし、それはまた...またgreppedしなければならないいくつかの不要な(私の場合)情報、生成された
デニス・


回答:


125
grep "^[^#;]" smb.conf

最初^の行は行の先頭を参照するため、最初の文字の後にコメントが始まる行は除外されません。 または[^#;]ではない文字を意味します。#;

つまり、#and 以外の文字で始まる行を報告し;ます。それはで始まらない行の報告と同じではありません#し、;(あなたが使用したいいるgrep -v '^[#;]'ことも除外することで)行を、私はあなたが空のラインを気疑うようすなわち、この場合には、おそらく望ましいです。

先頭の空白文字を無視する場合は、次のように変更できます。

grep '^[[:blank:]]*[^[:blank:]#;]' smb.conf

または

grep -vxE '[[:blank:]]*([#;].*)?' smb.conf

または

awk '$1 ~ /^[^;#]/' smb.conf

正解は次のとおりcat /etc/samba/smb.conf | grep ^[^#\;]です。とにかくありがとう
1

ええ、または「引用符」を使用できます。その後編集しました。
goldilocks

7
@denysあなたは間違っています:goldilocksの応答はあなたよりも悪くありません。.1 cat ...| 構文の使用は避けてください!.2空行と、スペースのみを含む行をホイップする場合、コメントUでこれを使用できます。grep -v "^ *\(#.*\|\)$" < smb.conf
F. Hauri

7
@EmanuelBergそれは役に立たないフォークです。cat file | grep "blah"implieは、を介して2つのバイナリを実行しているFIFOながら、grep "blah" <fileまったく同じやると結合しfile naturalyのgrep年代にSTDIN[bash]役に立たない猫は、あらゆる検索エンジンを介した検索のフル機能の主題です!-> blog.sanctum.geek.nz/useless-use-of-cat ...サンプル用
F.ハウリ

2
それはまったく同じことをしません。2つのプロセスと、1つのプロセスで十分なパイプを作成します。@ F.Hauriの最後のコメントにあるリンクを読んでください。
rahmu

4

Vimソリューション:

:v/^\s*[#\n]/p

vimの解決策を自分で見つけようとしたときに、この質問に出くわしました。


1
これにより、空白で始まる行も削除されます。
クサラナンダ

本当です。それ以外の場合はコメント間の行が出力を埋めるため、設定ファイルに役立つことがわかりました。あなたではなく空白行を維持したい場合は、変更*する+ので、好き:v/^\s+[#\n]/p
デイビット・ロード

3

oliver nadjの答えのgrepへのパイプは、(GNU grepまたは互換性があると仮定する)によって排除できます:

grep -v "^\s*[#\;]\|^\s*$" <some_conf_file>

2番目のgrep i @ nadjは役に立たないように見えますが、@ goldilocksの答えは十分以上でした。
アルケマール

1
goldilocksの答えが正しかったことに同意します。ただし、空の行を表示しないことも有用だと考えました。
モーテンリンド

2
grep -v "^\s*[#;]" any.conf | grep -v "^\s*$"

それは私のために働くものです。コメントまたは空の行を無視します。ハッシュマークまたはセミコロンの前の空白も無視します


2

これらの例は、人々に役立つかもしれません。

[user@host tmp]$ cat whitespacetest
# Line 1 is a comment with hash symbol as first char

# Line 2 is a comment with hash symbol as second char
  # Line 3 is a comment with hash symbol as third char
        # Line 4 is a comment with tab first, then hash
        ; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$

最初のgrepの例は、任意の量の空白文字で始まり、その後にハッシュ記号が続く行を除外します。

[user@host tmp]$ grep -v '^[[:space:]]*#' whitespacetest

        ; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$

2番目は、任意の量の空白で始まり、その後にハッシュ記号またはセミコロンが続く行を除外します。

[user@host tmp]$ grep -v '^[[:space:]]*[#;]' whitespacetest

[user@host tmp]$

0

ここで私はより良いものを得ました(GNU grepまたは互換性があると仮定します):

grep -v '^[#;/%<]\|^\s*$' anyfile.conf

で始まる行#;/%<は角括弧で囲まれ、パイプの後の2番目のフィルターは\s*$空白行です。


2
どのタイプのconfファイルで、<または/コメントに使用されますか?<コメント以外のすべてのconfファイル形式を知っています。!Xリソースファイルのように使用されることがあります。
ステファンシャゼラス


-2
egrep -v "^#|^$" anyfile.txt

このコマンドは、コメントと空白行を除くファイル内のすべての情報をgrepします。


2
smb.confが次のようにコメントしていることに注意してください;
Jeff Schaller

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.