grep -v は grep の補完を返しません。

grep -v は grep の補完を返しません。

ファイル内のスペースで始まる行をフィルタリングしたいと思います。次のコマンドを使用します。

grep -v "^ " < input > input_no_starting_space

結果を再確認するには、次のコマンドを実行します。

grep "^ " < input > double_check

input_no_starting_space次に、合計の行数を計算し、その合計がのdouble_check行数と等しいことを確認しますinput。このために私はwc -l

何らかの理由でこのチェックが失敗しました。つまり、行番号の合計がの行数より小さいですinput。私のファイルには何百万行もありますが、小さな例では問題を再現できないようです。 grepを使用する方法に問題があります(私が望んでいてgrep常にgrep -v互いに補完するので)、それともこれが私のファイルのアーティファクトである可能性が高いですか?後者ならこの遺物は何でしょうか?

これは、GNU grep 3.4を使用するUbuntu 20.04.3にあります。

ベストアンサー1

input_fileあなたのデータには、単純なテキストデータ以上の内容が含まれる可能性があります。

grepwithオプションを試してください-a

データエンコードとNULL値のコマンド--binary-files=TYPEオプションgrepman grep最初の段落も参照してください。

ファイルのデータまたはメタデータがファイルにバイナリデータが含まれていることを示す場合、そのファイルはタイプタイプと見なされます。非テキストバイトはバイナリデータを表します。これは、現在のロケールに対して誤ってエンコードされた出力バイト、または-zオプションが指定されていない場合は空の入力バイトです。

おすすめ記事