web-dev-qa-db-ja.com

コンテキスト行でgrepを使用する場合、「-」行区切り文字を削除するにはどうすればよいですか?

Compare.txtという名前のテキストファイルがあり、パターン "nmse_gain_constant"を含むすべての行に続く単一行を抽出します。次のコマンドは私に近づきます:

grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant

ただし、これには、目的のテキストの各行の間にセパレータ「-」行が含まれます。 「-」行を削除する簡単なアイデアはありますか?

ここにテキスト例をいくつか示しますが、このWeb投稿では「-」文字が制御文字として誤って解釈され、表示される内容が正しくありません。

53
Michael

私はこれをします:

 grep ... | grep -v -- "^--$"

しかし、これも機能します!

grep --no-group-separator ...

そして、その「-」または空白行さえ吐き出しません。

83
Erik Aronesty

Grepには文書化されていないパラメーター「--group-separator」があり、これはデフォルトの「-」を上書きします。これを「」に設定すると、二重ダッシュを削除できます。ただし、空の行が表示されます。私も同じ問題を抱えていたので、grepのソースコードを読んでこのパラメーターを見つけました。

24
Shaohua Li

さて、デフォルトでAスイッチはそれらの文字を追加するので、謎ではありません。

man grep状態:

-A NUM

    Places  a  line  containing  a  group  separator  (--)   between
    contiguous  groups  of  matches.  With the -o or --only-matching
    option, this has no effect and a warning is given.

ただし、単純なsedを使用して結果をクリーンアップできます。

yourgrep | sed '/^--$/d'
20
Eddie

AWKを使用している場合、それほど多くのgrepsにパイプしたり、他のツール(sedなど)を使用したりする必要はありません。

awk '/nmse_gain_constant/{getline;print }' compare.txt
7
ghostdog74

1つの解決策は次のとおりです。

grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant  | grep -v "\-\-"
3
Amirshk