insert EOF statement before the last line of file












3















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
    4 hours ago











  • Let me know if you want that as an answer and not just comment

    – Sergiy Kolodyazhnyy
    4 hours ago
















3















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
    4 hours ago











  • Let me know if you want that as an answer and not just comment

    – Sergiy Kolodyazhnyy
    4 hours ago














3












3








3








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 4 hours 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 4 hours ago









EliEli

1184




1184




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
    4 hours ago











  • Let me know if you want that as an answer and not just comment

    – Sergiy Kolodyazhnyy
    4 hours 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
    4 hours ago











  • Let me know if you want that as an answer and not just comment

    – Sergiy Kolodyazhnyy
    4 hours 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
4 hours 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
4 hours ago













Let me know if you want that as an answer and not just comment

– Sergiy Kolodyazhnyy
4 hours ago





Let me know if you want that as an answer and not just comment

– Sergiy Kolodyazhnyy
4 hours ago










2 Answers
2






active

oldest

votes


















5














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














    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























      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









      5














      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






























        5














        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




























          5












          5








          5







          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 4 hours ago

























          answered 4 hours ago









          filbrandenfilbranden

          10.1k21645




          10.1k21645

























              4














              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














                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












                  4








                  4







                  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 4 hours ago









                  Jeff SchallerJeff Schaller

                  42.8k1159136




                  42.8k1159136






















                      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

                      GameSpot

                      日野市

                      Tu-95轟炸機