在 Ed 中,我可以进行搜索以替换所有空行,如下所示:
g/^$/d
Run Code Online (Sandbox Code Playgroud)
这将删除所有空行。但是如果我想删除两个或更多空行并保留 1 怎么办?例如:
Line 1
Line 2
Line 3
Run Code Online (Sandbox Code Playgroud)
变成:
Line 1
Line 2
Line 3
Run Code Online (Sandbox Code Playgroud) 我想创建一个sed命令来从给定文档中删除所有这些奇怪的字符:
sed -n 's/\\|\xc2\xaeMD-IT\xc2\xaf\\|\xc2\xaeMD\\+BO\xc2\xaf\\|\xc2\xaeMDNM\xc2\xaf\xc2\xaeLL\\.8LI,0LI\xc2\xaf\\|\xc2\xaeLL0LI,0LI\xc2\xaf\\|\xc2\xaeMD\\+IT\xc2\xaf\\|\xc2\xaeLL.8LI,0LI\xc2\xaf\xc2\xaeMDIT\xc2\xaf\\|\xc2\xaeMDNM\xc2\xaf\xc2\xaeFL\xc2\xaf\xc2\xaeLL.8LI,0LI\xc2\xaf\\|\xc2\xaeFL\xc2\xaf\xc2\xaeMD-BO\xc2\xaf\\|\xc2\xaeFL\xc2\xaf\xc2\xaeMD-BO\xc2\xaf\\|\xc2\xaeMD-BO\xc2\xaf\\|\xc2\xaf\xc2\xaeOF1IN,1IN\xc2\xaf\xc2\xaeFC\xc2\xaf\xc2\xaeLL1LI,0LI\xc2\xaf\\|\\|\xc2\xaeSF1,1\xc2\xaf\\|\xc2\xaeFM1FT=0LI,LR=1;\\|\xc2\xaeMDSU\xc2\xaf\xc2\xaeFN1\xc2\xaf\\|\xc2\xaeMDNM\xc2\xaf\xc2\xaf\\|\xc2\xaeIV-RTF\\|\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\|\xc2\xaf\xc2\xaeBF0\xc2\xaf\\|\xc2\xaeFS1\\|-------------------------------------\\|\xc2\xaf\xc2\xaeFW1\\|\\|//gp'\nRun Code Online (Sandbox Code Playgroud)\n这些代码都是在另一个应用程序中创建的Nota Bene,我有许多包含此类代码的文件,我想将它们转换为纯文本,甚至可能是 Markdown。
问题是字符没有被替换。我尝试过这样做,Sublime Text并成功使用查找替换(正则表达式)剥离文档。sed对我来说,创建一个脚本比用于Sublime此任务更好。
我也尝试过使用Ed,但它也没有找到替代品。
这是在 Sublime Text 中打开时的示例 nb 文件:
\n\xc2\xaeSSDEFAULTS\xc2\xaf\xc2\xaeLR1\xc2\xaf\xc2\xaeJU\xc2\xaf\xc2\xaeMD+BO\xc2\xaf\xc2\xaeUFTimes New Roman\xc2\xaf\xc2\xaeSZ12Pt\xc2\xafGlossary\xc2\xaeMD+BO\xc2\xaf\xc2\xaeTS.5IN,1IN,1.5IN,2IN,2.5IN,3IN,3.5IN,4IN,4.5IN,5IN,5.5IN,6IN\xc2\xaf \xc2\xaeMD-BO\xc2\xaf\n\xc2\xaeNJ\xc2\xaf\xc2\xaeLR1\xc2\xaf\xc2\xaeLL.5LI,0LI\xc2\xaf\xc2\xaeMD+BO\xc2\xaf\xc2\xaeLL0LI,0LI\xc2\xaf\xc2\xaeMDNM\xc2\xaf\xc2\xaeLR1\xc2\xaf\xc2\xaeLL.5LI,0LI\xc2\xafA fortiori proposition: If X is true, then how much greater is Y true? To move logically from a stronger argument to establish a weaker argument. The weaker argument is sometimes presented by the speaker as the stronger argument.\n\xc2\xaeLL0LI,0LI\xc2\xaf\xc2\xaeLR1\xc2\xaf\xc2\xaeLL.5LI,0LI\xc2\xaf\xc2\xaeLL0LI,0LI\xc2\xaf\xc2\xaeLR1\xc2\xaf\xc2\xaeLL.5LI,0LI\xc2\xafAccusative of motion/direction - Indicates …Run Code Online (Sandbox Code Playgroud) 我目前在 Windows 上的 Debian WSL 中运行 Gnu ed 版本 1.18。如果我使用以下编码编辑文件:
ASCII text, with CRLF, LF line terminators
Run Code Online (Sandbox Code Playgroud)
或者
ASCII text, with CRLF,
Run Code Online (Sandbox Code Playgroud)
那么 ed 无法正确地将行与j command. 相反,它删除了要连接的第一行。
如果文件是在 ed 中创建的,则不会出现此问题,但它会影响在其他程序中创建并随后在 ed 中编辑的文件。GNU ed 1.17 中也发现了同样的问题。
这是一个错误吗?如何规避这一问题?
是否有一个命令ed重复上一个命令?我知道可以重复最后一次搜索(使用//),但是重复和/或编辑最后一个命令而无需重新输入的命令会很有帮助。