web-dev-qa-db-ja.com

バッチファイルを介してテキストファイルの特定の行を削除する

生成されたtxtファイルがあります。このファイルには余分な特定の行があり、削除する必要があります。削除が必要な各行には、2つの文字列のいずれかが含まれています。 「エラー」または「リファレンス」。これらのトークンは、行のどこにでも表示できます。他のすべての行を保持しながら、これらの行を削除したいと思います。

そのため、txtファイルが次のようになっている場合:

データの良い行
 C:\ Directory\ERROR\myFile.dllの悪い行
別の良いデータ行
悪い行:REFERENCE 
良いライン

ファイルを次のようにしたいと思います。

データの良好なライン
データの別の良好なライン
良好なライン

TIA。

66
chrome

以下を使用してください。

type file.txt | findstr /v ERROR | findstr /v REFERENCE

これには、sed/awk/Perlなどを見つけてインストールするのではなく、Windows OSの標準ツールを使用するという利点があります。

運用中の次のトランスクリプトを参照してください。

 C:\> type file.txt 
 Good line of data 
 bad line of C:\ Directory\ERROR\myFile.dll 
 Another good line of data 
 bad line:REFERENCE 
 Good line 
 
 C:\> type file.txt | findstr/vエラー| findstr/v REFERENCE 
 Good line of data 
 Another good line of data 
 Good line 
98
paxdiablo

Findstrのみを使用して、@ paxdiabloと同じソリューションを実現できます。複数のコマンドを一緒にパイプする必要はありません。

findstr /V "ERROR REFERENCE" infile.txt > outfile.txt

この仕組みの詳細:

  • / vは、検索文字列と一致しない行を検索します(@paxdiabloが使用する同じスイッチ)。
  • 検索文字列が引用符で囲まれている場合、各単語を使用してOR検索を実行します(区切り文字はスペースです)
  • findstrは入力ファイルを取得できます。「type」コマンドを使用してテキストを入力する必要はありません
  • "> outfile.txt"は結果をファイルoutfile.txtに送信し、代わりにコンソールに出力します。 (ファイルが存在する場合は上書きされます。追加する場合は、代わりに「>> outfile.txt」を使用してください。)
  • また、大文字と小文字を区別しない一致を行うために、/ iスイッチを追加することを検討することもできます。
39
Rick

Sedを使用している場合:

sed -e '/ REFERENCE/d' -e '/ ERROR/d' [ファイル名]

FILENAMEは、良い行と悪い行を含むテキストファイルの名前です。

5
Rob

Perlがインストールされている場合は、Perl -i -n -e"print unless m{(ERROR|REFERENCE)}"がトリックを実行するはずです。

1
mirod