Jaki jest najłatwiejszy sposób dołączania tekstu do pliku w systemie Linux?
Rzuciłem okiem na to pytanie , ale zaakceptowana odpowiedź wykorzystuje dodatkowy program ( sed
) Jestem pewien, że powinien być łatwiejszy sposób z echo
lub podobnym.
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter.
^D
Zasadniczo możesz zrzucić dowolny tekst do pliku. CTRL-D wysyła sygnał końca pliku, który kończy wejście i wraca do powłoki.
sudo !!
- co powoduje wykonanie ostatniego polecenia zsudo
przedrostkiem. Niedawno dowiedziałem się, że działa to również znano
itp. (Przez przypadkową próbęnano nano auth
...)!!
wcześniej, super. Tak często robię takie rzeczycat /var/log/apache/error.log
i nie otrzymuję pozwolenia. Można to również zrobić za pomocą identyfikatora z historii, np.sudo !1419
Spowoduje to wykonanie polecenia w wierszu1419
historii jako sudo.Co powiesz na:
Użycie
>>
operatora dopisze dane na końcu pliku, natomiast użycie>
spowoduje nadpisanie zawartości pliku, jeśli już istnieje.Możesz też użyć
printf
w ten sam sposób:Pamiętaj, że używanie powyższych może być niebezpieczne. Na przykład, jeśli masz już plik i musisz dołączyć dane na końcu pliku i zapomnisz dodać ostatni,
>
wszystkie dane w pliku zostaną zniszczone. Możesz zmienić to zachowanie, ustawiającnoclobber
zmienną w.bashrc
:Teraz, kiedy spróbujesz to zrobić
echo "hello" > file.txt
, otrzymasz ostrzeżeniecannot overwrite existing file
.Aby wymusić zapis do pliku, musisz teraz użyć specjalnej składni:
Powinieneś również wiedzieć, że domyślnie
echo
dodaje końcowy znak nowej linii, który można pominąć za pomocą-n
flagi:Bibliografia
echo(1) - Linux man page
noclobber variable
I/O Redirection
źródło
cat
, ale lepiej bądź ostrożny, upewniając się, że używasz>>
zamiast>
!sudo rm -r /
=)sudo rm -r /
niżsudo rm -rf /
! ^ _ ^ Czy jest flaga, która prosiłaby o potwierdzenie przed nadpisaniem zawartości istniejącego pliku>
? Aliasowanie tego, aby zawsze używać takiej flagi, wydaje się być dobrym pomysłem.set -o noclobber
swój.bashrc
, ale nie możesz nadpisać istniejącego pliku bez użycia specjalnej składniecho "hello" >| <filename>
Innym możliwym sposobem jest:
-a
Dołączy na końcu pliku.W razie potrzeby
sudo
użyj:źródło
>/dev/null
końcu zapobiega wyświetlaniu "tekstu" w konsoli.Kontynuuj, aby zaakceptować odpowiedź.
Jeśli używasz tego w skrypcie, potrzebujesz czegoś innego niż CTRL-D do wyznaczenia końca . Spróbuj tego zamiast tego:
Spowoduje to dołączenie tekstu do podanego pliku (z wyłączeniem „EOF”).
Wykorzystuje tutaj dokument (lub heredoc) .
Jeśli jednak potrzebujesz sudo do dołączenia do podanego pliku, napotkasz problemy z używaniem heredoc z powodu przekierowania I / O, jeśli piszesz bezpośrednio w wierszu poleceń.
Ta odmiana zadziała, gdy będziesz pisać bezpośrednio w wierszu poleceń:
Lub możesz użyć
tee
zamiast tego, aby uniknąć problemu z wierszem poleceń sudo, który pojawia się podczas używania heredoc z cat:źródło
cat << 'EOF' >
od lat i nie wiedziałem ocat << 'EOF' >>
dołączaniu! Dzięki