Erstellen Sie eine Textdatei und füllen Sie sie mit bash

79

Ich muss eine Textdatei erstellen (sofern sie nicht bereits vorhanden ist) und eine neue Zeile mit bash in die Datei schreiben.

Ich bin sicher, es ist einfach, aber könnte mir das jemand erklären?

switz
quelle

Antworten:

40

Wenn Sie dies als Skript möchten, sollte das folgende Bash-Skript das tun, was Sie möchten (und Ihnen mitteilen, wann die Datei bereits vorhanden ist):

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

Wenn Sie nicht möchten, dass die Meldung "bereits vorhanden" angezeigt wird, können Sie Folgendes verwenden:

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

Bearbeiten über die Verwendung von:

Speichern Sie jede Version mit einem Namen, den Sie mögen, sagen wir "create_file" (zitiert meine, Sie möchten sie nicht im Dateinamen haben). Um die Datei ausführbar zu machen, führen Sie an einer Eingabeaufforderung Folgendes aus:

chmod u+x create_file

Legen Sie die Datei in einem Verzeichnis in Ihrem Pfad ab und verwenden Sie sie dann mit:

create_file NAME_OF_NEW_FILE

$ 1 ist eine spezielle Shell-Variable, die das erste Argument in der Befehlszeile nach dem Programmnamen verwendet. dh $ 1 nimmt NAME_OF_NEW_FILE im obigen Verwendungsbeispiel auf.

GreenMatt
quelle
Könnte ich es durch "text.txt" ersetzen?
switz
1
@Switz: Siehe Bearbeitung, in der $ 1 erklärt wird. Wenn Sie $ 1 im Skript durch "text.txt" ersetzen, wird immer "text.txt" als Dateiname verwendet.
GreenMatt
97

Das Erstellen einer Textdatei unter Unix kann über einen Texteditor (vim, emacs, gedit usw.) erfolgen. Aber was Sie wollen, könnte so etwas sein

echo "insert text here" > myfile.txt

Dadurch wird der Text 'Text hier einfügen' in eine Datei myfile.txt eingefügt. Um zu überprüfen, ob dies funktioniert hat, verwenden Sie den Befehl 'cat'.

cat myfile.txt

Wenn Sie an eine Datei anhängen möchten, verwenden Sie diese Option

echo "append this text" >> myfile.txt
ostler.c
quelle
19

Angenommen, Sie meinen UNIX-Shell-Befehle, führen Sie sie einfach aus

echo >> file.txt

echoGibt eine neue Zeile aus und >>weist die Shell an, diese neue Zeile an die Datei anzuhängen und zu erstellen, falls sie noch nicht vorhanden ist.

Um die Frage richtig zu beantworten, muss ich jedoch wissen, was passieren soll, wenn die Datei bereits vorhanden ist. Wenn Sie beispielsweise den aktuellen Inhalt durch die neue Zeile ersetzen möchten, würden Sie verwenden

echo > file.txt

BEARBEITEN: und als Antwort auf Justins Kommentar können Sie dies tun, wenn Sie die neue Zeile nur hinzufügen möchten, wenn die Datei noch nicht vorhanden war

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

Zumindest funktioniert das in Bash, ich bin mir nicht sicher, ob es auch in anderen Shells funktioniert.

David Z.
quelle
+1. Ich denke, es gibt noch eine andere mögliche Interpretation: Erstellen und schreiben Sie eine neue Zeile, wenn die Datei noch nicht vorhanden ist, andernfalls ändern Sie die Datei überhaupt nicht.
Justin Ardini
@ Justin: Guter Punkt, ich denke, ich kann diesen auch hinzufügen und wir werden alle Optionen abdecken.
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

Dieser Code prüft, ob die angegebene JSON-Datei des Benutzers im Test-Home-Verzeichnis vorhanden ist oder nicht. Wenn es nicht vorhanden ist, wird es mit dem Inhalt erstellt. Sie können den Speicherort und den Inhalt der Datei entsprechend Ihren Anforderungen ändern.

Moh
quelle
2

Ihre Frage ist etwas vage. Dies ist ein Shell-Befehl, der das tut, was Sie meiner Meinung nach tun möchten:

echo >> name_of_file
zwol
quelle