我想自动从 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
看这个答案以获得解决方法的想法。