ed 命令:从第 1 行删除直到第一个空行

Jac*_*hen 6 ed

我从教科书中看到了这段代码;这本书只说这1,/^[ ]*$/d 意味着“从第 1 行删除,直到第一个空行”。每个字符的具体含义是什么?

ed $1 << EOF
    1,/^[ ]*$/d
    w
    q
EOF
Run Code Online (Sandbox Code Playgroud)

Bod*_*odo 4

1,/.../表示从第一行到与 之间的模式匹配的行的范围/

/^[ ]*$/[ ]*匹配从行首^到行尾包含 0 个或任意数量空格的行$
目前尚不清楚问题中的代码是否是故意的以及是否是书中的精确副本。单个空格周围的括号不是必需的。也许原作者想要在括号之间有一个空格和一个制表符,可以用字符类替换[[:blank:]]

d是删除该行的命令

w写入文件

q退出编辑器

ed这些命令通过此处文档发送到,由 指示<< EOF。该字符串是一个半任意名称,与下面的其他四行EOF配对。EOF不加EOF引号意味着中间行中的任何变量都将被扩展。

这里要注意的另一件事是示例中未加引号的$1. 命令ed/脚本将根据第一个位置参数(脚本或函数的参数)执行,并进行进一步的空格分割和文件名生成。这个论点确实应该被引用。如需进一步阅读,请参阅为什么我的 shell 脚本因空格或其他特殊字符而卡住?以及忘记在 bash/POSIX shell 中引用变量的安全隐患