-o
grepとフラグを組み合わせたいです-v
。しかし、何の結果も得られません。私はファイルを持っています:
foo
bar
foobar
私は電話する:grep -vo foo ./file
何を期待していますか?
bar
bar
または
bar
bar
しかし、何の結果も得られません。
grepのマニュアルページから:
-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.
...
-v, --invert-match
Invert the sense of matching, to select non-matching lines.
フラグを1つだけ使用すると、期待どおりに動作します。しかし、両方のフラグでgrepを動作させる方法は?私はDebian AMD64でgrep(GNU grep)3.3を使用しています。
答え1
あなたが言いたいことはgrep
:
foo
それを含む各行だけを印刷し、- ない行を印刷します。
foo
grepに話す内容は次のとおりです。
- 一致しない行
foo
またはを含まない行の一部を印刷します。foo
これは次のように減らすことができます。
- すべての行を印刷して削除します
foo
。
私の考えでsed
これを行うのに最適なツールは次のとおりです。
$ sed 's/foo//g' ./file
bar
bar
これは言う:各行に対してfoo
グローバルに何も置き換えないによって世界的にこれは行のすべてのインスタンスを意味します。
空白行も削除するには:
$ sed -e 's/foo//g' -e '/^$/d' ./file
bar
bar
これは言う:
foo
世界中で何も置き換えない、その後- 空行ごとに削除します。