2013-07-17 20 views
56

Jaki jest najłatwiejszy sposób dołączania tekstu do pliku w systemie Linux?Jak dołączyć tekst do pliku?

Miałem wygląd at this question, ale zaakceptowana odpowiedź używa dodatkowego programu (sed) Jestem pewien, że powinien istnieć łatwiejszy sposób z echo lub podobnym.

Odpowiedz

75
cat >> filename 
This is text, perhaps pasted in from some other source. 
Or else entered at the keyboard, doesn't matter. 
^D 

Zasadniczo można zrzucić dowolny tekst, który ma do pliku. CTRL-D wysyła sygnał końca pliku, który przerywa wejście i zwraca cię do powłoki.

+0

@JonKiparsky: Przepraszam, nie widziałem, żeby było napisane w twojej odpowiedzi ... –

+1

Jak mogę to zrobić, gdy plik wymaga uprawnień roota? – UselesssCat

100

Jak o:

echo "hello" >> <filename> 

pomocą operatora >> dołączy dane na końcu pliku, natomiast za pomocą > nadpisuje zawartość pliku, jeśli już istniejących.

Można również użyć printf w ten sam sposób:

printf "hello" >> <filename> 

Należy pamiętać, że może to być niebezpieczne w użyciu wyżej. Na przykład, jeśli masz już plik i musisz dodać dane na końcu pliku i zapomnisz dodać ostatnie > wszystkie dane w pliku zostaną zniszczone. Można to zmienić poprzez ustawienie zmiennej noclobber w swojej .bashrc:

set -o noclobber 

Teraz podczas próby zrobić echo "hello" > file.txt dostaniesz ostrzeżenie mówiąc cannot overwrite existing file.

Aby wymusić zapis do pliku należy teraz użyć specjalnej składni:

echo "hello" >| <filename> 

Warto również wiedzieć, że domyślnie echo dodaje spływu new-line charakter, który można stłumić stosując flagę -n:

echo -n "hello" >> <filename> 

Odniesienia

+2

Ogólnie rzecz biorąc, podoba mi się to bardziej niż zaakceptowana odpowiedź, która używa 'cat', ale lepiej uważaj, używając' '' zamiast '>'! – sixty4bit

+0

@ sixty4bit - Całkowicie się zgadzam, ale myślę, że zawsze musisz wiedzieć, co robisz podczas pracy z powłoką, lub możesz zrobić coś w stylu 'sudo rm -r /' =) – Cyclonecode

+0

lepiej 'sudo rm -r /' niż 'sudo rm -rf /'!^_^Czy istnieje flaga, która prosi o potwierdzenie przed zastąpieniem zawartości istniejącego pliku przez '>'? Aliasy, które zawsze używają takiej flagi, wydają się być dobrym pomysłem. – sixty4bit

14

Inny możliwy sposób jest:

echo "text" | tee -a filename 

-a dołączy na końcu pliku.

7

Kontynuuj, aby zaakceptować odpowiedź.

Potrzebujesz czegoś innego niż CTRL-D to designate the end if using this in a script. Spróbuj zamiast tego:

cat <<EOF>> filename 
This is text entered via the keyboard or via a script. 
EOF 

Spowoduje to dołączenie tekstu do podanego pliku (bez "EOF").

Wykorzystuje numer here document (or heredoc).

Jednakże, jeśli potrzebujesz sudo do dołączenia do podanego pliku, napotkasz problemy używając heredoc z powodu przekierowania We/Wy, jeśli piszesz bezpośrednio w linii poleceń.

Odmiana ta będzie działać, gdy piszesz bezpośrednio w wierszu poleceń:

sudo sh -c 'cat <<EOF>> filename 
This is text entered via the keyboard. 
EOF' 

Albo można użyć tee zamiast uniknąć sudo problemu wiersza poleceń widziany podczas korzystania z heredoc z kotem:

tee -a filename << EOF 
This is text entered via the keyboard or via a script. 
EOF