不打开编辑器的情况下将行附加到文本文件的命令

不打开编辑器的情况下将行附加到文本文件的命令

假设我有一行想要添加到文件中而不打开编辑器。

我怎样才能附加这一行

alias list='ls -cl --group-directories-first'

到这个文件

config.fish

答案1

您可以附加线使用运算符将​​文本写入文件>>

echo "hello world" >> my_file.txt

或者你的情况

echo "alias list='ls -cl --group-directories-first'" >> config.fish

请注意不同类型的报价

答案2

有很多方法可以在不打开文本编辑器的情况下将内容附加到文件,特别是通过 Ubuntu 中的多个可用文本处理实用程序。一般来说,任何允许我们执行带有标志的open()系统调用的东西O_APPEND都可以用来将内容附加到文件。

  • GNU 版本的dd实用程序可以将数据附加到文件中conv=notrunc oflag=append

    printf "\nalias list='ls -cl --group-directories-first'\n" | dd conv=notrunc oflag=append bs=1 of=config.fish
    

    我们可以在管道的右侧使用类似这样的功能:

    dd conv=notrunc seek=$(wc -c < testFile.txt) bs=1 of=testFile.txt
    

    注意使用bs=1,即防止管道短读取

  • tee当你需要附加到文件并将其发送到标准输出或管道中的下一个命令时,可以使用该命令

    tee -a config.fish <<< "alias list='ls -cl --group-directories-first'"
    
  • awk具有附加运算符>>,它也是可移植的,并且由 POSIX 规范定义

    awk 'BEGIN{ printf "alias list=\x27ls -cl --group-directories-first\x27\n" >> "config.fish"  }'
    
  • 我们可以结合sed的标志$来匹配最后一行,a以进行追加和-i就地编辑。

    sed -i '$a alias list='"'"'ls -cl --group-directories-first'"'" config.fish
    
  • 我们甚至可以dd在 Python 3 中实现类似的东西:

    #!/usr/bin/env python3
    # read bytes from stdin, append to specified file
    import sys

    with open(sys.argv[1],'ab') as f:
         f.write(sys.stdin.buffer.read())

也可以看看:

答案3

添加到斯特凡诺的回答,您还可以使用cat

  • 使用 heredoc:

    $ cat >> config.fish <<'EOF'
    > alias list='ls -cl --group-directories-first'
    > EOF
    

    <<'EOF'表示“将以下内容作为输入,直到到达一行EOF”。引号表示按字面意思理解输入。

  • 或者在标准输入中输入以下行:

    $ cat >> config.fish
    

    然后粘贴或输入该行,按Enter转到新行,然后按 Ctrl+D 标记结束。

相关内容