
我想自動從 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
看這個答案獲得解決方法的想法。