【问题标题】:Sed command to add line of text to the very end of a filesed 命令将文本行添加到文件的最后
【发布时间】:2019-02-13 17:07:52
【问题描述】:

我想使用 sed 在文件的最后添加一行文本。在这种情况下,我正在使用 OS X,我想在 /etc/sudoers 文件中添加一行。我希望我的字符串成为文件中单独一行的最后一个字符串。有什么想法吗?

例子:

text 
text 
text
<my string>

谢谢。

【问题讨论】:

    标签: macos bash sed


    【解决方案1】:

    如果您可以在不使用 sed 的情况下执行此操作,那么执行 echo &lt;line&gt; &gt;&gt; /etc/sudoers 将很容易(但请注意您的线路有效!)。

    如果你想用 sed 来做,你可以用 sed -i -e '$a&lt;line&gt;' /etc/sudoers 转到最后一行,然后附加你的文本。

    【讨论】:

    • echo 命令不适用于 /etc/sudoers 文件,它说权限被拒绝...我也尝试了 sed 命令,它给了我一个 "sed: 1: "$atty_tickets :命令 a 需要 \ 后跟文本“
    • @Technic1an,你需要使用sudo
    • @Technic1an,/etc/sudoers文件默认是只读的,所以需要先使用chmod使其可写。
    • @Eric Renouf,BSD sed,不像 GNU sed 需要 -i 选项的参数。可以是扩展名或'',例如sed -i .bak ...sed -i '' ...。后者做到了。
    • 您可以将其通过管道传送到 tee:echo "line to add" | sudo tee -a /etc/sudoers
    【解决方案2】:

    考虑使用echo 和输出重定向:

    sudo sh -c "echo 'my string' >> /etc/sudoers"
    

    .

    【讨论】:

    • echo 命令不适用于 /etc/sudoers 文件,它表示权限被拒绝
    • @Technic1an:我进行了编辑以引入 sudo 命令以管理员身份运行它。为了让重定向通过sudo 起作用,我们需要运行一个shell 并通过-c 选项为其提供一个迷你shell 脚本。
    • @ctt,我没有看到你发布的内容,现在我已经删除了我的答案,因为你的答案更安全! :) +1
    【解决方案3】:

    您可以使用awk

    awk '1; END {print "text to add"}' file > tmp && mv tmp file
    

    这将在文件file 末尾添加text to add 作为新行

    【讨论】:

      【解决方案4】:

      我也尝试过使用 sed 来实现这一点,但不幸的是,还没有找到任何解决方案。但我找到了一种使用 echo 实现此目的的解决方法:

      $ echo "你要添加的行" >> yourTextFile.txt

      【讨论】:

        猜你喜欢
        • 2014-12-05
        • 2012-05-22
        • 1970-01-01
        • 1970-01-01
        • 2021-01-22
        • 2020-06-11
        • 2012-06-25
        相关资源
        最近更新 更多