Compare.txtという名前のテキストファイルがあり、パターン "nmse_gain_constant"を含むすべての行に続く単一行を抽出します。次のコマンドは私に近づきます:
grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant
ただし、これには、目的のテキストの各行の間にセパレータ「-」行が含まれます。 「-」行を削除する簡単なアイデアはありますか?
ここにテキスト例をいくつか示しますが、このWeb投稿では「-」文字が制御文字として誤って解釈され、表示される内容が正しくありません。
私はこれをします:
grep ... | grep -v -- "^--$"
しかし、これも機能します!
grep --no-group-separator ...
そして、その「-」または空白行さえ吐き出しません。
Grepには文書化されていないパラメーター「--group-separator」があり、これはデフォルトの「-」を上書きします。これを「」に設定すると、二重ダッシュを削除できます。ただし、空の行が表示されます。私も同じ問題を抱えていたので、grepのソースコードを読んでこのパラメーターを見つけました。
さて、デフォルトで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'
AWKを使用している場合、それほど多くのgrepsにパイプしたり、他のツール(sedなど)を使用したりする必要はありません。
awk '/nmse_gain_constant/{getline;print }' compare.txt
1つの解決策は次のとおりです。
grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant | grep -v "\-\-"