Powershell 编辑后,Windows 版 Sed 无法正常工作

Powershell 编辑后,Windows 版 Sed 无法正常工作

我想自动从 pdf 文件中选择数据,以便稍后在电子表格中处理。1:使用记事本将所有文本复制到 .txt 文件中 - 确定。2:使用 Powershell 删除所有换行符 CRLF,以创建单行文件 - 确定

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

这个答案以获得解决方法的想法。

相关内容