Powershell 編集後に Windows の Sed が動作しない

Powershell 編集後に Windows の Sed が動作しない

スプレッドシートで後で処理するために、PDF ファイルからデータを自動的に選択したいと考えています。1: メモ帳を使用して、すべてのテキストを .txt ファイルにコピーします - OK。2: Powershell を使用して、すべての改行 (CRLF) を削除して、1 行のファイルを作成します - OK

3: 不要なテキストを切り取る sed 編集が機能しません (私は 2 年間 sed を正常に使用してきました)。

powershell -command ""$(Get-Content T1.txt)" > t2.txt"

sed -i -r "s/Limited/XX/g" t2.txt - 動作しません。

ただし、Notepad++ (正規表現 \r\n を使用) を使用してすべての改行を手動で削除して txt ファイルを作成すると、同じ sed コマンドは正常に機能します。何かアイデアはありますか? .bat ファイル内のすべての改行を削除する代わりに何か方法はありますか? Win7 Prof 64 ビットを使用しています。

答え1

sedはテキストを処理するために設計されたPOSIXツールです。おそらく「単一行ファイル」はPOSIX のテキストファイル:

0 行以上の行にまとめられた文字を含むファイル。行には NUL 文字は含まれず、{LINE_MAX}<改行> 文字を含めて長さがバイトを超えることはできません。[…] 多くのユーティリティは、テキスト ファイルを操作するときに、予測可能なまたは意味のある出力のみを生成します。

空でない限り、不完全な行のみ:

ファイルの末尾にある 1 つ以上の非改行文字のシーケンス。

の定義と比較ライン:

0 個以上の非 <newline> 文字のシーケンスと終了の <newline> 文字。

LFは <改行> 文字です (CRは違います。このコンテキストでは はCR特別ではありません)。

私は Powershell を知らないので、あなたのコードが正常かどうかはわかりませんが、改行をすべて削除すると、おそらく不完全な行が作成されます。いずれにしても、Notepad++ は行を補完できるほど賢いと思います。

の実装によってはsed不完全な行を処理しないものもあります() と、そうするものもあります (少なくとも GNU はsedそうします)。どうやら、あなたのはsedそうではないようです。sedそうするファイルを探すか、"単一行" が <newline> 文字で適切に終了していることを確認してください。たとえば、Unix では、次のコマンドを実行します。

echo >> T1.txt

に 1 つの <newline> 文字を追加しますT1.txt。Powershell の方法はわかりません。申し訳ありません。

修正によって1 行のバイト数T1.txtが超過した場合、形式上はまだテキスト ファイルではないため、テキスト処理ユーティリティでは動作しない可能性があります。私のポイントは、行の長さに制限があるため、終了の <newline> 文字を追加してファイルを修正した後でも、場合によっては動作しない可能性があるということです。{LINE_MAX}sed

見るこの答え回避策のアイデアを得るため。

関連情報