insert EOF statement before the last line of file
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}
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
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
The method above just appends to file. So without a tool that can recognize the# End of fileline there's probably no better way to make it work. Such tool would be eitherawkorsed. 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 fileadded to originalcatcommand you have there, or via third step -echo '# End of file' >> /etc/security/limits.conf.
– Sergiy Kolodyazhnyy
Mar 2 at 2:10
Let me know if you want that as an answer and not just comment
– Sergiy Kolodyazhnyy
Mar 2 at 2:11
I'm unclear on the requirements: do you want to insert all 10 lines into some other undisclosed file? Or are you saying that you want to append the 8 lines of data into the limits.conf file, but just not at the end of that file?
– glenn jackman
Mar 2 at 18:29
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
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
edited Mar 2 at 2:15
Jeff Schaller♦
44.6k1162145
44.6k1162145
asked Mar 2 at 1:48
EliEli
1184
1184
The method above just appends to file. So without a tool that can recognize the# End of fileline there's probably no better way to make it work. Such tool would be eitherawkorsed. 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 fileadded to originalcatcommand you have there, or via third step -echo '# End of file' >> /etc/security/limits.conf.
– Sergiy Kolodyazhnyy
Mar 2 at 2:10
Let me know if you want that as an answer and not just comment
– Sergiy Kolodyazhnyy
Mar 2 at 2:11
I'm unclear on the requirements: do you want to insert all 10 lines into some other undisclosed file? Or are you saying that you want to append the 8 lines of data into the limits.conf file, but just not at the end of that file?
– glenn jackman
Mar 2 at 18:29
add a comment |
The method above just appends to file. So without a tool that can recognize the# End of fileline there's probably no better way to make it work. Such tool would be eitherawkorsed. 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 fileadded to originalcatcommand you have there, or via third step -echo '# End of file' >> /etc/security/limits.conf.
– Sergiy Kolodyazhnyy
Mar 2 at 2:10
Let me know if you want that as an answer and not just comment
– Sergiy Kolodyazhnyy
Mar 2 at 2:11
I'm unclear on the requirements: do you want to insert all 10 lines into some other undisclosed file? Or are you saying that you want to append the 8 lines of data into the limits.conf file, but just not at the end of that file?
– glenn jackman
Mar 2 at 18:29
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
Mar 2 at 2:10
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
Mar 2 at 2:10
Let me know if you want that as an answer and not just comment
– Sergiy Kolodyazhnyy
Mar 2 at 2:11
Let me know if you want that as an answer and not just comment
– Sergiy Kolodyazhnyy
Mar 2 at 2:11
I'm unclear on the requirements: do you want to insert all 10 lines into some other undisclosed file? Or are you saying that you want to append the 8 lines of data into the limits.conf file, but just not at the end of that file?
– glenn jackman
Mar 2 at 18:29
I'm unclear on the requirements: do you want to insert all 10 lines into some other undisclosed file? Or are you saying that you want to append the 8 lines of data into the limits.conf file, but just not at the end of that file?
– glenn jackman
Mar 2 at 18:29
add a comment |
3 Answers
3
active
oldest
votes
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 |
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 insert 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 (.). Write the file back to disk and then quit.
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 |
Another method: print all but the last line of the file, print the new text, then print the last line of the file. Then redirect all that output to a new file.
{
sed '$d' limits.conf
cat <<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
tail -1 limits.conf
} > tmpfile && mv tmpfile limits.conf
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
});
}
});
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
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
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 Mar 2 at 2:30
answered Mar 2 at 2:11
filbrandenfilbranden
10.7k21847
10.7k21847
add a comment |
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 insert 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 (.). Write the file back to disk and then quit.
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 insert 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 (.). Write the file back to disk and then quit.
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 insert 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 (.). Write the file back to disk and then quit.
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 insert 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 (.). Write the file back to disk and then quit.
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 Mar 2 at 2:13
Jeff Schaller♦Jeff Schaller
44.6k1162145
44.6k1162145
add a comment |
add a comment |
Another method: print all but the last line of the file, print the new text, then print the last line of the file. Then redirect all that output to a new file.
{
sed '$d' limits.conf
cat <<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
tail -1 limits.conf
} > tmpfile && mv tmpfile limits.conf
add a comment |
Another method: print all but the last line of the file, print the new text, then print the last line of the file. Then redirect all that output to a new file.
{
sed '$d' limits.conf
cat <<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
tail -1 limits.conf
} > tmpfile && mv tmpfile limits.conf
add a comment |
Another method: print all but the last line of the file, print the new text, then print the last line of the file. Then redirect all that output to a new file.
{
sed '$d' limits.conf
cat <<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
tail -1 limits.conf
} > tmpfile && mv tmpfile limits.conf
Another method: print all but the last line of the file, print the new text, then print the last line of the file. Then redirect all that output to a new file.
{
sed '$d' limits.conf
cat <<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
tail -1 limits.conf
} > tmpfile && mv tmpfile limits.conf
answered Mar 2 at 18:42
glenn jackmanglenn jackman
53k573114
53k573114
add a comment |
add a comment |
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 fileline there's probably no better way to make it work. Such tool would be eitherawkorsed. 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 fileadded to originalcatcommand you have there, or via third step -echo '# End of file' >> /etc/security/limits.conf.– Sergiy Kolodyazhnyy
Mar 2 at 2:10
Let me know if you want that as an answer and not just comment
– Sergiy Kolodyazhnyy
Mar 2 at 2:11
I'm unclear on the requirements: do you want to insert all 10 lines into some other undisclosed file? Or are you saying that you want to append the 8 lines of data into the limits.conf file, but just not at the end of that file?
– glenn jackman
Mar 2 at 18:29