insert EOF statement before the last line of file












2















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.










share|improve this question









New contributor




Eli is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





















  • 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
















2















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.










share|improve this question









New contributor




Eli is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





















  • 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














2












2








2








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.










share|improve this question









New contributor




Eli is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












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






share|improve this question









New contributor




Eli is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




Eli is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 1 hour ago









Jeff Schaller

42.8k1159136




42.8k1159136






New contributor




Eli is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 2 hours ago









EliEli

1134




1134




New contributor




Eli is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Eli is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Eli is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.













  • 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



















  • 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

















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










2 Answers
2






active

oldest

votes


















3














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.






share|improve this answer































    4














    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





    share|improve this answer

























      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.










      draft saved

      draft discarded


















      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









      3














      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.






      share|improve this answer




























        3














        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.






        share|improve this answer


























          3












          3








          3







          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.






          share|improve this answer













          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.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 1 hour ago









          Jeff SchallerJeff Schaller

          42.8k1159136




          42.8k1159136

























              4














              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





              share|improve this answer






























                4














                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





                share|improve this answer




























                  4












                  4








                  4







                  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





                  share|improve this answer















                  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






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited 1 hour ago

























                  answered 1 hour ago









                  filbrandenfilbranden

                  10k21645




                  10k21645






















                      Eli is a new contributor. Be nice, and check out our Code of Conduct.










                      draft saved

                      draft discarded


















                      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.




                      draft saved


                      draft discarded














                      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





















































                      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







                      Popular posts from this blog

                      CARDNET

                      Boot-repair Failure: Unable to locate package grub-common:i386

                      Aws NAT - Aws IGW- Aws router