Создайте текстовый файл и заполните его с помощью bash


81

Мне нужно создать текстовый файл (если он еще не существует) и записать новую строку в файл, используя bash.

Я уверен, что это просто, но может ли кто-нибудь мне это объяснить?

Ответы:


41

Если вы хотите, чтобы это было сценарием, следующий сценарий Bash должен делать то, что вы хотите (плюс сообщать вам, когда файл уже существует):

#!/bin/bash
if [ -e $1 ]; then
  echo "File $1 already exists!"
else
  echo >> $1
fi

Если вы не хотите, чтобы сообщение «уже существует», вы можете использовать:

#!/bin/bash
if [ ! -e $1 ]; then
  echo >> $1
fi

Изменить об использовании:

Сохраните любую версию с именем, которое вам нравится, скажем «create_file» (цитирую мои, вы не хотите, чтобы они были в имени файла). Затем, чтобы сделать файл исполняемым, в командной строке выполните:

chmod u+x create_file

Поместите файл в каталог на своем пути , затем используйте его с:

create_file NAME_OF_NEW_FILE

$ 1 - это специальная переменная оболочки, которая принимает первый аргумент в командной строке после имени программы; т.е. $ 1 подберет NAME_OF_NEW_FILE в приведенном выше примере использования.


Могу я заменить его на "text.txt"?
Switz

1
@Switz: См. Правку, объясняющую $ 1. Если вы замените $ 1 в скрипте на «text.txt», он всегда будет использовать «text.txt» в качестве имени файла.
GreenMatt

102

Создание текстового файла в unix можно выполнить с помощью текстового редактора (vim, emacs, gedit и т. Д.). Но то, что вы хотите, может быть примерно таким

echo "insert text here" > myfile.txt

Это поместит текст «вставить здесь текст» в файл myfile.txt. Чтобы убедиться, что это сработало, используйте команду «cat».

cat myfile.txt

Если вы хотите добавить в файл, используйте это

echo "append this text" >> myfile.txt

20

Предполагая, что вы имеете в виду команды оболочки UNIX, просто запустите

echo >> file.txt

echoпечатает новую строку, и >>командный интерпретатор сообщает оболочке добавить эту новую строку в файл, создавая, если он еще не существует.

Однако, чтобы правильно ответить на вопрос, мне нужно знать, что вы хотели бы, если файл уже существует. Если вы хотите заменить его текущее содержимое, например, новой строкой, вы должны использовать

echo > file.txt

EDIT: и в ответ на комментарий Джастина, если вы хотите добавить новую строку, только если файл еще не существует, вы можете сделать

test -e file.txt || echo > file.txt

По крайней мере, это работает в Bash, я не уверен, работает ли это также и в других оболочках.


+1. Я думаю, что есть еще одна возможная интерпретация: создать и записать новую строку, если файл еще не существует, иначе не изменяйте файл вообще.
Джастин Ардини

@Justin: хороший момент, думаю, я могу добавить и его, и у нас будут все варианты.
David Z

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

Этот код проверяет, присутствует ли данный файл JSON пользователя в тестовом домашнем каталоге или нет. Если его нет, он создаст его вместе с содержимым. Вы можете изменить расположение файла и его содержимое в соответствии с вашими потребностями.


2

Ваш вопрос немного расплывчатый. Это команда оболочки, которая, как мне кажется, делает то, что вы хотите:

echo >> name_of_file
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.