Eli*_*Eli 4 sed gnu text-processing cat
我想插入这个
cat <<EOF >> /etc/security/limits.conf
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
root soft nproc 65535
root hard nproc 65535
root soft nofile 65535
root hard nofile 65535
EOF
Run Code Online (Sandbox Code Playgroud)
进入文件的倒数第二行,在该# End of file
行之前。
我知道我可以使用其他方法来插入这个语句而不使用EOF
但对于视觉糖果我想保持这种格式以及可读性。
要保持相同的 here-document 格式并在文件的最后一行之前插入给定的文本,请尝试 ed!
ed -s /etc/security/limits.conf << EOF
$ i
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
root soft nproc 65535
root hard nproc 65535
root soft nofile 65535
root hard nofile 65535
.
wq
EOF
Run Code Online (Sandbox Code Playgroud)
这会向 ed 发送一系列命令,所有这些都在此处的文档中。我们处理文件中的最后一行$
并说我们想要i
插入一些文本。文本如下,就像在你的例子中一样;一旦我们完成了插入的文本,我们就告诉 ed 我们已经完成了一个句点 ( .
)。 W
将文件写回磁盘,然后q
uit。
如果你想折叠$ i
到$i
你想逃离美元符号或使用带引号的here文档(ed -s input << 'EOF' ...
),以防止$i
从扩大到目前谷i
变量或空,如果没有这样的变量集。
您可以使用ex
(这是一个模式的的vi
编辑器)来实现这一点。
您可以使用该:read
命令将内容插入到文件中。该命令采用文件名,但您可以使用/dev/stdin
伪设备从标准输入读取,这允许您使用<<EOF
标记。
该:read
命令还需要一个范围,您可以使用$-
符号,该符号分解为$
,表示文件的最后一行,并-
从中减去一个,到达文件的倒数第二行。(你也可以使用$-1
。)
把它们放在一起:
$ ex -s /etc/security/limits.conf -c '$-r /dev/stdin' -c 'wq' <<EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
root soft nproc 65535
root hard nproc 65535
root soft nofile 65535
root hard nofile 65535
EOF
Run Code Online (Sandbox Code Playgroud)
该-s
是让沉默(不是切换到可视化模式,这将使屏幕闪烁。)的$-r
缩写(全$-1read
会以及工作),最后wq
是怎么写的,并退出:在vi
。:-)
更新:如果不是在最后一行之前插入,而是要在具有特定内容的行之前插入(例如“#End of file”),则只需使用/search/
模式即可。
例如:
$ ex -s /etc/security/limits.conf -c '/^# End of file/-1r /dev/stdin' -c 'wq' <<EOF
...
EOF
Run Code Online (Sandbox Code Playgroud)