テキストファイルがあり、search_stringはありますがExcept_stringはない行を検索したいと思います。
端末では、以下は私が望む出力を提供します。
grep "search_string" | grep -v "\(exclude_string_A\|exclude_string_B\)"
テキストファイルで特定の問題(主にgrepとsedを使用)を検索するbashスクリプトがあります。最初のgrepコマンドの出力は、2番目のコマンドの入力として使用されていないようです。
たとえば、次を含むファイルの場合:
Gary: yes, that's what I said.
Paul: well, I didn't hear you.
Gary: okay, let's go.
Bashスクリプトでは、関連する行は次のようになります。
grep "Gary:" | grep -v "\(said\|told\)" $1
ただし、出力ファイルには次の部分が含まれています。
Paul: well, I didn't hear you.
Gary: okay, let's go.
ここに何か簡単な欠落があることを願っています!
答え1
あなたの考えは正確ですが、入力ファイル/文字列パラメータが間違った場所にあります。それは次のように書かなければなりません
grep "Gary:" "$1" | grep -v "\(said\|told\)"
これはgrep
、最初に一致する式を適用することを意味します。みんなorという単語を含む行Gary
とsaid
orという単語を含む行をフィルタリングしますtold
。
パイプを使用して実行すると、両方のプロセスが開始されますが、パイプを介してgrep
stdinから入力を取得し、表示される数行を印刷するのではなく、入力後の部分がファイルのように処理されます。|
$1
grep
ただし、この時点では、最初の端末はまだ標準入力ストリームからの入力を待っていますが、入力が表示されないため、端末が停止していることがわかります。Ctrl-CSIGINT信号を送信するには押します。最後に、パイプラインは終了します。