Створіть текстовий файл і заповніть його за допомогою 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"?
switchz

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. Я думаю, є ще 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.