insert EOF statement before the last line of file
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.
text-processing sed cat gnu
New contributor
add a comment |
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.
text-processing sed cat gnu
New contributor
The method above just appends to file. So without a tool that can recognize the# End of file
line there's probably no better way to make it work. Such tool would be eitherawk
orsed
. I'd recommend a 2 step process: delete the line viased -i '/# End of file/d'
and then insert the data you want with# End of file
added to originalcat
command you have there, or via third step -echo '# End of file' >> /etc/security/limits.conf
.
– Sergiy Kolodyazhnyy
1 hour ago
Let me know if you want that as an answer and not just comment
– Sergiy Kolodyazhnyy
1 hour ago
add a comment |
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.
text-processing sed cat gnu
New contributor
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.
text-processing sed cat gnu
text-processing sed cat gnu
New contributor
New contributor
edited 1 hour ago
Jeff Schaller
42.8k1159136
42.8k1159136
New contributor
asked 2 hours ago
EliEli
1134
1134
New contributor
New contributor
The method above just appends to file. So without a tool that can recognize the# End of file
line there's probably no better way to make it work. Such tool would be eitherawk
orsed
. I'd recommend a 2 step process: delete the line viased -i '/# End of file/d'
and then insert the data you want with# End of file
added to originalcat
command you have there, or via third step -echo '# End of file' >> /etc/security/limits.conf
.
– Sergiy Kolodyazhnyy
1 hour ago
Let me know if you want that as an answer and not just comment
– Sergiy Kolodyazhnyy
1 hour ago
add a comment |
The method above just appends to file. So without a tool that can recognize the# End of file
line there's probably no better way to make it work. Such tool would be eitherawk
orsed
. I'd recommend a 2 step process: delete the line viased -i '/# End of file/d'
and then insert the data you want with# End of file
added to originalcat
command you have there, or via third step -echo '# End of file' >> /etc/security/limits.conf
.
– Sergiy Kolodyazhnyy
1 hour ago
Let me know if you want that as an answer and not just comment
– Sergiy Kolodyazhnyy
1 hour ago
The method above just appends to file. So without a tool that can recognize the
# End of file
line there's probably no better way to make it work. Such tool would be either awk
or sed
. I'd recommend a 2 step process: delete the line via sed -i '/# End of file/d'
and then insert the data you want with # End of file
added to original cat
command you have there, or via third step - echo '# End of file' >> /etc/security/limits.conf
.– Sergiy Kolodyazhnyy
1 hour ago
The method above just appends to file. So without a tool that can recognize the
# End of file
line there's probably no better way to make it work. Such tool would be either awk
or sed
. I'd recommend a 2 step process: delete the line via sed -i '/# End of file/d'
and then insert the data you want with # End of file
added to original cat
command you have there, or via third step - echo '# End of file' >> /etc/security/limits.conf
.– Sergiy Kolodyazhnyy
1 hour ago
Let me know if you want that as an answer and not just comment
– Sergiy Kolodyazhnyy
1 hour ago
Let me know if you want that as an answer and not just comment
– Sergiy Kolodyazhnyy
1 hour ago
add a comment |
2 Answers
2
active
oldest
votes
To keep the same sort of here-document format and to insert the given text immediately before the last line of the file, try 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
This sends a sequence of commands to ed, all in a here-document. We address the last line in the file with $
and say that we would like to i
nsert some text. The text follows, just as in your example; once we're done with the inserted text, we tell ed we're done with a single period (.
). W
rite the file back to disk and then q
uit.
If you wanted to collapse the $ i
to $i
you'd want to escape the dollar sign or use a quoted here-document (ed -s input << 'EOF' ...
) to prevent $i
from expanding to the current vale of the i
variable or empty if there's no such variable set.
add a comment |
You can use ex
(which is a mode of the vi
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:
$ 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
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 the wq
is how you write and quit in vi
. :-)
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:
$ ex -s /etc/security/limits.conf -c '/^# End of file/-1r /dev/stdin' -c 'wq' <<EOF
...
EOF
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Eli is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f503902%2finsert-eof-statement-before-the-last-line-of-file%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
To keep the same sort of here-document format and to insert the given text immediately before the last line of the file, try 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
This sends a sequence of commands to ed, all in a here-document. We address the last line in the file with $
and say that we would like to i
nsert some text. The text follows, just as in your example; once we're done with the inserted text, we tell ed we're done with a single period (.
). W
rite the file back to disk and then q
uit.
If you wanted to collapse the $ i
to $i
you'd want to escape the dollar sign or use a quoted here-document (ed -s input << 'EOF' ...
) to prevent $i
from expanding to the current vale of the i
variable or empty if there's no such variable set.
add a comment |
To keep the same sort of here-document format and to insert the given text immediately before the last line of the file, try 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
This sends a sequence of commands to ed, all in a here-document. We address the last line in the file with $
and say that we would like to i
nsert some text. The text follows, just as in your example; once we're done with the inserted text, we tell ed we're done with a single period (.
). W
rite the file back to disk and then q
uit.
If you wanted to collapse the $ i
to $i
you'd want to escape the dollar sign or use a quoted here-document (ed -s input << 'EOF' ...
) to prevent $i
from expanding to the current vale of the i
variable or empty if there's no such variable set.
add a comment |
To keep the same sort of here-document format and to insert the given text immediately before the last line of the file, try 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
This sends a sequence of commands to ed, all in a here-document. We address the last line in the file with $
and say that we would like to i
nsert some text. The text follows, just as in your example; once we're done with the inserted text, we tell ed we're done with a single period (.
). W
rite the file back to disk and then q
uit.
If you wanted to collapse the $ i
to $i
you'd want to escape the dollar sign or use a quoted here-document (ed -s input << 'EOF' ...
) to prevent $i
from expanding to the current vale of the i
variable or empty if there's no such variable set.
To keep the same sort of here-document format and to insert the given text immediately before the last line of the file, try 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
This sends a sequence of commands to ed, all in a here-document. We address the last line in the file with $
and say that we would like to i
nsert some text. The text follows, just as in your example; once we're done with the inserted text, we tell ed we're done with a single period (.
). W
rite the file back to disk and then q
uit.
If you wanted to collapse the $ i
to $i
you'd want to escape the dollar sign or use a quoted here-document (ed -s input << 'EOF' ...
) to prevent $i
from expanding to the current vale of the i
variable or empty if there's no such variable set.
answered 1 hour ago
Jeff SchallerJeff Schaller
42.8k1159136
42.8k1159136
add a comment |
add a comment |
You can use ex
(which is a mode of the vi
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:
$ 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
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 the wq
is how you write and quit in vi
. :-)
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:
$ ex -s /etc/security/limits.conf -c '/^# End of file/-1r /dev/stdin' -c 'wq' <<EOF
...
EOF
add a comment |
You can use ex
(which is a mode of the vi
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:
$ 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
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 the wq
is how you write and quit in vi
. :-)
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:
$ ex -s /etc/security/limits.conf -c '/^# End of file/-1r /dev/stdin' -c 'wq' <<EOF
...
EOF
add a comment |
You can use ex
(which is a mode of the vi
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:
$ 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
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 the wq
is how you write and quit in vi
. :-)
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:
$ ex -s /etc/security/limits.conf -c '/^# End of file/-1r /dev/stdin' -c 'wq' <<EOF
...
EOF
You can use ex
(which is a mode of the vi
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:
$ 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
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 the wq
is how you write and quit in vi
. :-)
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:
$ ex -s /etc/security/limits.conf -c '/^# End of file/-1r /dev/stdin' -c 'wq' <<EOF
...
EOF
edited 1 hour ago
answered 1 hour ago
filbrandenfilbranden
10k21645
10k21645
add a comment |
add a comment |
Eli is a new contributor. Be nice, and check out our Code of Conduct.
Eli is a new contributor. Be nice, and check out our Code of Conduct.
Eli is a new contributor. Be nice, and check out our Code of Conduct.
Eli is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f503902%2finsert-eof-statement-before-the-last-line-of-file%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
The method above just appends to file. So without a tool that can recognize the
# End of file
line there's probably no better way to make it work. Such tool would be eitherawk
orsed
. I'd recommend a 2 step process: delete the line viased -i '/# End of file/d'
and then insert the data you want with# End of file
added to originalcat
command you have there, or via third step -echo '# End of file' >> /etc/security/limits.conf
.– Sergiy Kolodyazhnyy
1 hour ago
Let me know if you want that as an answer and not just comment
– Sergiy Kolodyazhnyy
1 hour ago