2016-05-27 10 views
1

に失敗し、私が実行しようとしているコマンドは単純化のためGrepの - スペース

fgrep -h -f "list.csv" input.csv > output.csv 

で、リストファイルを2つの項目が含ま言うことができます:
content1
「コンテンツ2を"

これらは両方とも入力ファイルで一致します。たとえば、私が入力した場合

fgrep -h "c o n t e n t 2" input.csv 

私は結果を受け取ります。しかし、私が最初のコマンドを使用すると、それはcontent1にのみ一致します。

これは、リストファイルにスペースを含む文字列を引用符で囲んだ結果です。 grepを引用符内の内容と一致させるにはどうしたらよいですか?

答えて

1

fgrepを使用している場合、間隔の空いたエンティティの周りに引用符は必要ありません。 fgrepは、各行を文字通り既に取ります。コマンドラインでは、余分なコマンドライン引数から文字列を明確にするために引用符が必要です。あなたのファイルは次のようになります:

content1 
c o n t e n t 2 
+0

リストファイルを手動で作成するのではなく、大きなファイルです。私は引用符を取り除く方法を見つけるか、fgrepから引用符を取り除く必要があると思います。 – ibav

+0

残念ながらそうです。あなたのコマンドを1行にするには、 'sed'を使います:' sed 's/^ "\(。* \)" $/\ 1 /' input.csv'は、引用符で囲みます。私はあなたのコマンドに "$(...)"か何かを介して "コマンド補間"をどのように "注入"するかを理解するためにシェルパイプでは余りにも錆びていますが、それを理解できると確信しています。 –

+0

この回答は、ファイルに引用符が含まれていない場合、grepが正しく機能するという点で正しいです。リストファイルからすべての引用符を削除するにはtr -d '"'というコマンドを使い、結果は正確でした。 – ibav