I want to insert this
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
into the second to last line of the file, before the # End of file
line.
I know I could use other methods to insert this statement without the use of EOF
but for visual candy I wanted to maintain this format as well for readability.
Best Answer
You can use
ex
(which is a mode of thevi
editor) to accomplish this.You can use the
:read
command to insert the contents into the file. That command takes a filename, but you can use the/dev/stdin
pseudo-device to read from standard input, which allows you to use a<<EOF
marker.The
:read
command also takes a range, and you can use the$-
symbol, which breaks down into$
, which indicates the last line of the file, and-
to subtract one from it, getting to the second to last line of the file. (You could use$-1
as well.)Putting it all together:
The
-s
is to make it silent (not switch into visual mode, which would make the screen blink.) The$-r
is abbreviated (a full$-1read
would have worked as well) and finally thewq
is how you write and quit invi
. :-)UPDATE: If instead of inserting before the last line, you want to insert before a line with specific contents (such as "# End of file"), then just use a
/search/
pattern to do so.For example: