为什么在 ed 中使用

为什么在 ed 中使用

使用edput 字符#到文件第 10 行到第 20 行的开头/etc/passwd。解决方案如下

ed /etc/passwd <<\END
10,20s/^/#/
%p
Q
END

我的问题是,do<<在这里和\之前意味着什么END以及我们为什么使用它。我们是否必须一直使用它?

答案1

您所展示的内容ed与编辑脚本一起使用。

编辑脚本(一系列命令)作为此处文档ed传递。ed此处文档是一段可能是多行文本重定向进入实用程序的标准输入。这里的文档是第一个和最后一个END标记之间的内容。\第一个标记前面的表示END该文档被引用,这意味着 shell 不会尝试扩展其中的变量等。它也可以写成<<'END'。在此特定实例中,\可以删除 ,因为编辑脚本不包含任何可供 shell 扩展的内容。

ed这是用于更简单的非交互式编辑的常用方法,尽管以这种方式使用ed时应与其选项一起使用。-s

该命令的效果相当于使用sedwith

sed '10,20/^/#/' /etc/passwd

(该ed脚本将在文件中进行更改,然后在退出之前在终端中显示该文件没有保存更改,这或多或少是上述sed脚本逐行执行的操作)。


这是不是不过,这是编辑文件的好方法/etc/passwded幸运的是,脚本实际上没有这样做,因为它不保存更改)。为此,应使用vipw用于修改此文件(如等)的工具或特定命令。useradd这是因为在许多 Unix 系统上,该文件需要与一个或多个其他文件或数据库同步,并且编辑它也需要更新这些文件(例如vipw自动更新)。

答案2

这不是ed,这是你的外壳。

这意味着获取原始输入直到单词END并将其发送到STDIN命令的。

例如:

$ cat <<\END
> something
> END
something

产生与以下相同的结果:

$ echo something | cat
something

相关内容