Odpowiedzi:
Użyj >>
zamiast >
kierować wyjście do pliku:
your_command >> file_to_append_to
Jeśli file_to_append_to
nie istnieje, zostanie utworzony.
Przykład:
$ echo "hello" > file
$ echo "world" >> file
$ cat file
hello
world
Do append
pliku 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 overwrite
pliku użyj >
echo "hello tom" > read.txt
cat read.txt
wtedy wyjście jest
hello tom
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.
Służy command >> file_to_append_to
do 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 noclobber
do swojego .bashrc
.
Zapewnia to, że jeśli przypadkowo wpiszesz command > file_to_append_to
istnieją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.
Użyj >>
operatora, aby dodać tekst do pliku.
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
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
Używałbym printf zamiast echa, ponieważ jest bardziej niezawodny i \n
poprawnie 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
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
cat
jest ... po prostu całkowicie zwariowane. (Jest pusty, ponieważ właśnie przekierowałeś standardowe wyjście do pliku.)
echo
usuwa znaki nowego wiersza z ciągu. Jak dołączyć do pliku ciąg zawierający znaki nowej linii?