Jak dołączyć dane wyjściowe na końcu pliku tekstowego

478

Jak dołączyć wynik polecenia na końcu pliku tekstowego?

vincy
źródło

Odpowiedzi:

665

Użyj >>zamiast >kierować wyjście do pliku:

your_command >> file_to_append_to

Jeśli file_to_append_tonie istnieje, zostanie utworzony.

Przykład:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world
aioobe
źródło
4
Problem polega na tym, że echousuwa znaki nowego wiersza z ciągu. Jak dołączyć do pliku ciąg zawierający znaki nowej linii?
Timothy Swan
5
@TimothySwan, wierzę z opcją -e.
Valentin Grégoire,
echo nie usuwa znaków nowej linii z łańcucha. Jeśli nie podasz poprawnie cytatu, powłoka podzieli ciąg i przekaże argumenty do echa, a echo nigdy nie zobaczy nowego wiersza.
William Pursell
105

Do appendpliku użyj >>

echo "hello world"  >> read.txt   
cat read.txt     
echo "hello siva" >> read.txt   
cat read.txt

wtedy wyjście powinno być

hello world   # from 1st echo command
hello world   # from 2nd echo command
hello siva

Do overwritepliku użyj >

echo "hello tom" > read.txt
cat read.txt  

wtedy wyjście jest

hello tom

yoctotutor.com
źródło
74

Możesz użyć operatora >>. Spowoduje to dołączenie danych z polecenia na końcu pliku tekstowego.

Aby przetestować tę próbę, uruchom:

echo "Hi this is a test" >> textfile.txt

Zrób to kilka razy, a następnie uruchom:

cat textfile.txt

Zobaczysz, że twój tekst został kilkakrotnie dołączony do pliku textfile.txt.

walta
źródło
40

Służy command >> file_to_append_todo dołączania do pliku.

Na przykład echo "Hello" >> testFile.txt

UWAGA: jeśli używasz tylko jednego >, nadpiszesz zawartość pliku. Aby mieć pewność, że tak się nigdy nie stanie, możesz dodać set -o noclobberdo swojego .bashrc.

Zapewnia to, że jeśli przypadkowo wpiszesz command > file_to_append_toistniejący plik, ostrzeże Cię, że plik już istnieje. Przykładowy komunikat o błędzie:file exists: testFile.txt

Tak więc, gdy >go użyjesz , będziesz mógł jedynie utworzyć nowy plik, a nie zastąpić istniejący plik.

rzemiosło
źródło
22

Użyj >>operatora, aby dodać tekst do pliku.

Nev Stokes
źródło
21

Użycie tee z opcją -a (--append) umożliwia dołączenie do wielu plików jednocześnie, a także użycie sudo (bardzo przydatne podczas dołączania do chronionych plików). Poza tym jest interesujące, jeśli chcesz używać innych powłok oprócz bash, ponieważ nie wszystkie powłoki obsługują operatorów> i >>

echo "hello world" | sudo tee -a output.txt

Ten wątek ma dobrych odpowiedzi dotyczące tee

victortv
źródło
2
To najlepszy sposób na dodanie czegoś z nową linią.
M_R_K,
2
szukał sposobu dołączenia do chronionych plików i to rozwiązuje problem
Woootiness
14

na całe pytanie:

cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt

to doda 720 linii (30 * 24) do o.txt, a następnie zmieni nazwę pliku na podstawie bieżącej daty.

Uruchom powyższe z cronem co godzinę lub

while :
do
    cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
    sleep 3600
done
jm666
źródło
11

Używałbym printf zamiast echa, ponieważ jest bardziej niezawodny i \npoprawnie przetwarza formatowanie, takie jak nowa linia .

Ten przykład generuje dane wyjściowe podobne do echa w poprzednich przykładach:

printf "hello world"  >> read.txt   
cat read.txt
hello world

Jeśli jednak w tym przykładzie zastąpiłbyś printf przez echo, echo traktowałoby \ n jako ciąg znaków, ignorując w ten sposób zamiar

printf "hello\nworld"  >> read.txt   
cat read.txt
hello
world
Braden Holt
źródło
7

Sugeruję zrobienie dwóch rzeczy:

  1. Użyj >>w skrypcie powłoki, aby dołączyć zawartość do określonego pliku. Nazwę pliku można naprawić lub użyć jakiegoś wzorca.
  2. Ustaw cronjob co godzinę, aby uruchomić skrypt powłoki
piłkarz
źródło
7

Na przykład twój plik zawiera:

 1.  mangesh@001:~$ cat output.txt
    1
    2
    EOF

jeśli chcesz dołączyć na końcu pliku, wówczas ----> pamiętaj spacje między „tekstem” >> „nazwą pliku”

  2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt 
    1
    2
    EOF
    somthing to append

Aby zastąpić zawartość pliku:

  3.  mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
    somthing new to write
Mangesh Bhapkar
źródło
1
Jest to mylące w wielu szczegółach. Spacje nie są ważne, a przesyłanie pustych danych wyjściowych catjest ... po prostu całkowicie zwariowane. (Jest pusty, ponieważ właśnie przekierowałeś standardowe wyjście do pliku.)
tripleee