创建文本文件并使用bash填充它

swi*_*itz 65 unix

我需要创建一个文本文件(除非它已经存在)并使用bash向文件写一个新行.

我确信这很简单,但有人可以向我解释一下吗?

ost*_*r.c 80

在unix中创建文本文件可以通过文本编辑器(vim,emacs,gedit等)完成.但你想要的可能是这样的

echo "insert text here" > myfile.txt
Run Code Online (Sandbox Code Playgroud)

这会将文本'insert here here'放入文件myfile.txt中.要验证这是否有效,请使用命令'cat'.

cat myfile.txt
Run Code Online (Sandbox Code Playgroud)

如果要附加到文件,请使用此选项

echo "append this text" >> myfile.txt
Run Code Online (Sandbox Code Playgroud)


Gre*_*att 34

如果您希望将其作为脚本,则以下Bash脚本应该执行您想要的操作(并在文件已存在时告诉您):

#!/bin/bash
if [ -e $1 ]; then
  echo "File $1 already exists!"
else
  echo >> $1
fi
Run Code Online (Sandbox Code Playgroud)

如果您不想要"已存在"消息,则可以使用:

#!/bin/bash
if [ ! -e $1 ]; then
  echo >> $1
fi
Run Code Online (Sandbox Code Playgroud)

编辑使用:

保存您喜欢的任何版本的版本,让我们说"create_file"(引用我的,你不希望它们在文件名中).然后,为了使文件可执行,在命令提示符处执行:

chmod u+x create_file
Run Code Online (Sandbox Code Playgroud)

将文件放在路径中的目录中,然后将其用于:

create_file NAME_OF_NEW_FILE
Run Code Online (Sandbox Code Playgroud)

$ 1是一个特殊的shell变量,它在程序名后面的命令行中获取第一个参数; 即$ 1将在上面的用法示例中选择NAME_OF_NEW_FILE.

  • @Switz:请参阅解释 $1 的编辑。如果将脚本中的 $1 替换为“text.txt”,则它将始终使用“text.txt”作为文件名。 (2认同)

Dav*_*d Z 15

假设您的意思是UNIX shell命令,请运行

echo >> file.txt
Run Code Online (Sandbox Code Playgroud)

echo打印换行符,并>>告诉shell将该换行符附加到该文件,如果它尚不存在则创建.

但是,为了正确回答这个问题,如果文件已经存在,我需要知道你想要发生什么.例如,如果您想用换行符替换当前内容,则可以使用

echo > file.txt
Run Code Online (Sandbox Code Playgroud)

编辑:并回应贾斯汀的评论,如果你只想在文件尚不存在时添加换行符,你可以做

test -e file.txt || echo > file.txt
Run Code Online (Sandbox Code Playgroud)

至少在Bash中有效,我不确定它是否也适用于其他shell.


小智 6

#!/bin/bash
file_location=/home/test/$1.json
if [ -e $policy ]; then
  echo "File $1.json already exists!"
else
  cat > $file_location <<EOF
{
      "contact": {
          "name": "xyz",
          "phonenumber":   "xxx-xxx-xxxx"
      }
    }
EOF
fi
Run Code Online (Sandbox Code Playgroud)

此代码检查用户的给定 JSON 文件是否存在于测试主目录中。如果它不存在,它将用内容创建它。您可以根据需要修改文件位置和内容。