如何通过Linux中的shell脚本自动将数据写入文本文件?
我能够打开文件。但是,我不知道如何写数据。
答案 0 :(得分:292)
echo "some data for the file" >> fileName
答案 1 :(得分:119)
#!/bin/sh
FILE="/path/to/file"
/bin/cat <<EOM >$FILE
text1
text2
text3
text4
EOM
答案 2 :(得分:49)
您可以将命令的输出重定向到文件:
$ cat file > copy_file
或追加
$ cat file >> copy_file
如果您想直接写命令echo 'text'
$ echo 'Hello World' > file
答案 3 :(得分:39)
#!/bin/bash
cat > FILE.txt <<EOF
info code info
info code info
info code info
EOF
答案 4 :(得分:19)
我知道这是一个该死的老问题,但由于OP是关于脚本的,而且谷歌把我带到这里的事实,也应该提到同时打开文件描述符进行阅读和写作。
#!/bin/bash
# Open file descriptor (fd) 3 for read/write on a text file.
exec 3<> poem.txt
# Let's print some text to fd 3
echo "Roses are red" >&3
echo "Violets are blue" >&3
echo "Poems are cute" >&3
echo "And so are you" >&3
# Close fd 3
exec 3>&-
然后cat
终端上的文件
$ cat poem.txt
Roses are red
Violets are blue
Poems are cute
And so are you
此示例导致文件poem.txt打开以便在文件描述符3上进行读写。它还显示* nix框知道更多fd&#39; s然后只是stdin,stdout和stderr(fd 0,1,2 )。它实际上拥有很多。通常,内核可以分配的文件描述符的最大数量可以在/proc/sys/file-max
或/proc/sys/fs/file-max
中找到,但使用大于9的任何fd都是危险的,因为它可能与shell内部使用的fd冲突。所以不要打扰并且只使用fd的0-9。如果你需要更多bash脚本中的9个文件描述符,你应该使用不同的语言:)
无论如何,fd可以用很多有趣的方式使用。
答案 5 :(得分:11)
我喜欢这个答案:
cat > FILE.txt <<EOF
info code info
...
EOF
但如果你想在文件的末尾添加一些内容而不删除已存在的内容,则会建议cat >> FILE.txt << EOF
像这样:
cat >> FILE.txt <<EOF
info code info
...
EOF
答案 6 :(得分:4)
对于此处文档不可用的环境(Makefile
,Dockerfile
等),您通常可以使用printf
来获得合理清晰有效的解决方案。
printf '%s\n' '#!/bin/sh' '# Second line' \
'# Third line' \
'# Conveniently mix single and double quotes, too' \
"# Generated $(date)" \
'# ^ the date command executes when the file is generated' \
'for file in *; do' \
' echo "Found $file"' \
'done' >outputfile
答案 7 :(得分:0)
也可以在这里使用文档和vi,下面的脚本生成具有3行和变量插值的FILE.txt
VAR=Test
vi FILE.txt <<EOFXX
i
#This is my var in text file
var = $VAR
#Thats end of text file
^[
ZZ
EOFXX
然后文件将有3行,如下所示。 “ i”将启动vi插入模式,并类似地使用Esc和ZZ关闭文件。
#This is my var in text file
var = Test
#Thats end of text file
答案 8 :(得分:0)
我认为有几个非常好的答案,但是没有所有可能性的简要总结。因此:
此处大多数答案背后的核心原则是redirection。对于写入文件,有两个重要的重定向操作符:
echo 'text to completely overwrite contents of myfile' > myfile
echo 'text to add to end of myfile' >> myfile
提到的其他内容,也可以通过“此处的文档”以交互方式写入文件,而不是使用echo 'text'
这样的固定输入源,有关详细信息,请参见上面的bash手册的链接。那些答案,例如
cat > FILE.txt <<EOF
或cat >> FILE.txt <<EOF
使用相同的重定向运算符,但通过“此处文档”添加另一层。在以上语法中,您通过cat
的输出写入FILE.txt。仅在给交互式输入指定了特定的字符串(在这种情况下为“ EOF”)之后才进行写操作,但这可以是任何字符串,例如:
cat > FILE.txt <<'StopEverything'
或cat >> FILE.txt <<'StopEverything'
同样会工作。在这里,文档还会寻找各种分隔符和其他有趣的解析字符,因此请查看文档以获取有关此信息的进一步信息。
有点费解,并且更多地是在理解重定向和Here Documents语法方面的练习,但是您可以将Here Document样式语法与标准重定向运算符结合起来,成为Here String:
重定向cat输入的输出 cat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
答案 9 :(得分:0)
这是我的答案。 $ cat文件> copy_file
答案 10 :(得分:0)
如果你正在使用变量,你可以使用
first_var="Hello"
second_var="How are you"
如果您想连接两个字符串并将其写入文件,请在下面使用
echo "${first_var} - ${second_var}" > ./file_name.txt
您的 file_name.txt 内容将是“你好 - 你好吗”