Powershell 編輯後 Sed for Windows 無法運作

Powershell 編輯後 Sed for Windows 無法運作

我想自動從 pdf 文件中選擇數據,以便稍後在電子表格中進行處理。 1:使用記事本將所有文字複製到 .txt 檔案中 - 好的。 2:刪除所有換行符、CRLF,以建立單行文件,使用 Powershell - ok

3:Sed 編輯刪除不需要的文字不起作用(我已經成功使用 sed 2 年了)。

powershell -指令 ""$(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 格式的文字文件:

包含組織成零行或多行的字元的檔案。這些行不包含 NUL 字符,且{LINE_MAX}長度不能超過位元組,包括 <newline> 字元。 [...]許多實用程式僅在操作文字檔案時產生可預測或有意義的輸出。

除非為空,否則它將包含一個不完整的線僅有的:

文件末尾的一個或多個非 <newline> 字元的序列。

與 的定義比較:

零個或多個非 <newline> 字元加上終止 <newline> 字元的序列。

LF是 <newline> 字元(CR不是;在這種情況下CR並不特殊)。

我不了解 Powershell,也無法判斷您的程式碼是否正常,但如果它刪除所有換行符,那麼它可能會建立一個不完整的行。我想 Notepad++ 夠聰明,無論如何都能完成這一行。

一些實作sed不處理不完整的行(例子)並且有些這樣做(至少 GNUsed這樣做)。顯然你sed沒有。找到sed它或確保“單行”由 <newline> 字元正確終止。例如在 Unix 中這個指令:

echo >> T1.txt

恰好將一個 <newline> 字元附加到T1.txt.抱歉,我不知道 Powershell 的方式。

請注意,如果固定的單行位元組數T1.txt超過了,那麼從形式上來說它仍然不是文字文件,因此文字處理實用程式可能仍然無法使用它。我的觀點是,您可能有行長度限制,因此在某些情況下它可能不起作用,即使您透過新增終止 <newline> 字元來修復檔案後也是如此。{LINE_MAX}sed

這個答案獲得解決方法的想法。

相關內容