将文本附加到文件的方法

将文本附加到文件的方法

我总是这样做将文本附加到文件中

echo "text text text ..." >> file
# or
printf "%s\n" "text text text ..." >> file

我想知道是否有更多的方法可以实现相同的、更优雅或更不寻常的方式。

答案1

我非常喜欢这个,我可以在脚本的顶部设置一个日志文件并在整个过程中写入它,而不需要全局变量或记住更改文件名的所有出现:

exec 3>> /tmp/somefile.log
...

echo "This is a log message" >&3
echo "This goes to stdout"
echo "This is written to stderr" >&2

exec 3>dest构造打开文件dest进行写入(用于>>追加、<用于读取 - 就像平常一样)并将其附加到文件描述符#3。然后你得到描述符#1标准输出, #2 为标准错误,以及该文件的新#3 dest

您可以加入标准错误标准输出在具有诸如exec 2>&1- 之类的构造的脚本的持续时间内,存在许多强大的可能性。文档 ( man bash) 对此有这样的说法:

exec [-cl] [-a name] [command [arguments]]如果command指定,它将替换外壳。 [...]如果command未指定,任何重定向都会在当前 shell 中生效 [...]。

答案2

以下是将文本附加到文件的其他几种方法。

  1. 使用 T 恤

    tee -a file <<< "text text text ..."
    
  2. 使用 awk

    awk 'BEGIN{ printf "text text text ..." >> "file" }'
    
  3. 使用 sed

    sed -i '$a text text text ...' file
    sed -i -e "\$atext text text ..." file
    

资料来源:

答案3

用一个here-document方法:

cat <<EOF >> file
> foo
> bar
> baz
> EOF

测试:

$ cat file
aaaa
bbbb

$ cat <<EOF >> file
> foo
> bar
> baz
> EOF

$ cat file
aaaa
bbbb
foo
bar
baz

答案4

使用 Unix 文件编辑器。两者GNUBSD版本。

ed(1)与使用printf

printf '%s\n' '$a' 'foo bar baz' . w | ed -s file.txt

bash 特定但更神秘的语法,使用$' 'shell 引用和herestring

ed -s file.txt <<< $'$a\nfoo bar baz\n.\nw'

ex(1)与使用printf

printf '%s\n' '$a' 'foo bar baz' . x | ex -s file.txt

bash 特定但更神秘的语法$' 'shell 引用和herestring

ex -s file.txt <<< $'$a\nfoo bar baz\n.\nx'

相关内容